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
  • 相关阅读:
    预备作业02-162315马军
    预备作业01-162315马军
    # 2017-2018-1 20155224 《信息安全系统设计基础》第四周学习总结
    # 2017-2018-1 20155224 《信息安全系统设计基础》第3周学习总结
    # 第二周课堂实践以及MyOD
    # 2017-2018-1 20155224 《信息安全系统设计基础》第1周学习总结
    # 20155224 2016-2017-2《Java程序设计》课程总结
    # 20155224 实验五 Java网络编程及安全
    # 20155224 课堂实践 MyOD
    # 20155224 实验四 Android程序设计
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10593357.html
Copyright © 2011-2022 走看看