• 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
  • 相关阅读:
    iOS取消按钮点击时的动画效果
    iOS实现简书和知乎的上滑隐藏导航栏下拉显示导航栏效果
    idea添加Jetty时提示JMX module is not included
    人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间
    如果做好一个出色的程序员
    阅读的技巧
    JQuery返回布尔值Is()方法.条件判断
    Javascript遍历each与map
    html5Canvas绘制弧线(圆形)
    jQuery插件背景滑动菜单(第二次自已偿试写插件)
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10593357.html
Copyright © 2020-2023  润新知