Esper学习之七:EPL语法(三)
转载请注明出处:http://blog.csdn.net/luonanqin
国庆七天,本想出去玩玩,可是哪里都是人,所以还是家里蹲吧。上篇说到了Select Clause和From Clause,今天这篇就说说Aggregation,Group by,Having和Output Clause。先预告一下,由于例子比较多,所以篇幅会有些长,需要各位耐心观看哦。
1.Aggregation
和SQL一样,EPL也有Aggregation,即聚合函数。语法如下:
以上5个属性我就不多做解释了,使用方式是作为trigger_expression跟在when关键字的后面。例如:
// 在MyContext下,查询context的id并计算Apple的sum price,当Context结束且输入的事件总数大于10时,输出。然后设置FinishCompute变量为truecontext MyContext select context.id, sum(price) from Apple output when terminated and count_insert_total > 10 then set FinishCompute = true// 在MyContext下,计算Apple的avg size,并每1分钟输出第一个进入的事件计算结果,当context结束时也输出一次计算结果context MyContext select avg(size) from Apple output first every 1 min and when terminated
Output和Aggregation,Group by一起使用时,first,last,all,snapshot四个关键字产生的效果会比较特别。建议各位自己看看Esper的官方文档的Appendix A,有相当完整的例子做说明,因为篇幅较长,所以我没有放在文章里进行讲解。另外针对first,last,all,snapshot四个关键字,只有使用snapshot是不会缓存计算结果。其他的关键字会缓存事件直到触发了输出条件才会释放,所以如果输入的数据量比较大,就要注意输出条件被触发前的内存使用量。
关于Output的内容比较多,使用起来也比较灵活。各位在使用的时候,也许会发现自己写的达不到预期的效果,本人在使用的时候也遇到过,所以还请各位耐心地多试几次。Group by和Aggregation和SQL的类似,所以使用起来很容易。