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
  • 相关阅读:
    linux内核的配置
    数据库常用SQL语句(二):多表连接查询
    数据库常用SQL语句(三):子查询
    数据库常用SQL语句(一):常用的数据库、表操作及单表查询语句
    数据库管理系统软件的软件架构
    Java对象的序列化
    关于重写对象equals方法的问题
    对Spring的理解
    Myeclipse项目工程目录中各种Libraries的含义
    对JDBC的使用理解
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10593357.html
Copyright © 2011-2022 走看看