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
  • 相关阅读:
    洛谷3004 [USACO10DEC]宝箱Treasure Chest
    洛谷3778 [APIO2017]商旅
    洛谷4141消失之物——每个体积的角度
    洛谷2943 [USACO09MAR]清理Cleaning Up——转变枚举内容的dp
    bzoj1858[Scoi2010]序列操作
    poj1325机器工作——二分图最小点覆盖
    洛谷P1144——最短路计数
    poj3254二进制放牛——状态压缩DP
    poj1191棋盘分割——区间DP
    洛谷P1474货币系统——背包方案计数
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10593357.html
Copyright © 2011-2022 走看看