zoukankan      html  css  js  c++  java
  • esper(3)-窗口&聚合分组

    一、Insert and Remove Stream

    1、

    select * from com.ebc.updatelistener.User

    只输出newEvents,不会输出oldEvents。即使加上isstream,也不会。

    2、

    select irstream * from com.ebc.updatelistener.User.win:length(5)

    当达到第6个时,第1个会成为oldEvents。如果去掉irstream,则不会产生oldEvents。

    二、Filter and Where-Clause

    Filter:

    select * from com.ebc.filterwhere.User(amount>=200).win:length(5)

    where:

    select * from com.ebc.filterwhere.User.win:length(5) where amount>=200

    filter:  只有符合条件的event才进入view和触发updateListener

    where:所有event都会进入view,只有符合条件的event才触发updateListener

    三、聚合与分组

    1、sum

    //统计进入的5个event的总额
     select sum(amount) from com.ebc.aggGroup.User.win:length_batch(5) 

    --UpdateListener
    Integer sumV
    = (Integer) (newEvents[0].get("sum(amount)"));

    2、groupby

    初始数据

    --view
    class User implements Serializable {
        private String name;
        private int age;
        private int amount;
    }
    --事件
    runtime.sendEvent(new User("遥远1",1,1));
    runtime.sendEvent(new User("遥远2",2,2));
    runtime.sendEvent(new User("遥远1",3,3));
    runtime.sendEvent(new User("遥远2",4,4));
    runtime.sendEvent(new User("遥远1",5,5));
    runtime.sendEvent(new User("遥远6",6,6));

    情况1:

    --epl
    select name,sum(amount) from com.ebc.aggGroup.User.win:length_batch(5) group by name
    --输出
    name=遥远2,sumV=6
    name=遥远1,sumV=9

    情况2:

    --epl
    select name,sum(amount),age from com.ebc.aggGroup.User.win:length_batch(5) group by name
    --输出
    name=遥远1,sumV=9,age=1
    name=遥远2,sumV=6,age=2
    name=遥远1,sumV=9,age=3
    name=遥远2,sumV=6,age=4
    name=遥远1,sumV=9,age=5

    情况3:

    --epl
    select name,sum(amount),age from com.ebc.aggGroup.User.win:length_batch(5) group by name,age
    --输出
    name=遥远1,sumV=1,age=1
    name=遥远2,sumV=2,age=2
    name=遥远1,sumV=3,age=3
    name=遥远1,sumV=5,age=5
    name=遥远2,sumV=4,age=4

    如果情况3的epl不变,修改发送数据,即红色部分

    runtime.sendEvent(new User("遥远1",1,1));
    runtime.sendEvent(new User("遥远2",2,2));
    runtime.sendEvent(new User("遥远1",1,3));
    runtime.sendEvent(new User("遥远2",4,4));
    runtime.sendEvent(new User("遥远1",1,5));
    runtime.sendEvent(new User("遥远6",6,6));

    则输出

    name=遥远1,sumV=9,age=1
    name=遥远2,sumV=2,age=2
    name=遥远2,sumV=4,age=4

    group by总结

    --只对name分组来sum,age不参与
    select name,sum(amount),age from com.ebc.aggGroup.User.win:length_batch(5) group by name
    
    --对name、age分组来sum
    select name,sum(amount),age from com.ebc.aggGroup.User.win:length_batch(5) group by name,age
  • 相关阅读:
    枯燥的数据库“三级模式”
    SQL Server四个“系统数据库”作用的简介
    数据库的范式
    使用JMeter进行分布式性能测试
    使用JMeter测试你的EJB
    jmeter资源监控器开发——进入jmeter的源码世界
    如何解决使用JMeter时遇到的问题
    安装jmeter
    SMTP错误码/建议解决方法
    Jmeter接口测试 实例
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10593357.html
Copyright © 2011-2022 走看看