- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Esper学习之七EPL语法三
国庆七天,本想出去玩玩,可是哪里都是人,所以还是家里蹲吧。上篇说到了Select Clause和From Clause,今天这篇就说说Aggregation,Group by,Having和Output Clause。先预告一下,由于例子比较多,所以篇幅会有些长,需要各位耐心观看哦。1.Aggregation和SQL一样,EPL也有Aggregation,即聚合函数。语法如下:[plain] view plaincopyaggregate_function([all|distinct]?expression)??aggregate_function就是聚合函数的名字,比如avg,sum等。expression通常是事件流的某个属性,也可以是不同事件流的多个属性,或者是属性和常量、函数之间的运算。举例如下。 [plain] view plaincopy//?查询最新5秒的Apple的平均价格??select?avg(price)?as?aPrice?from?Apple.win:time(5?sec)???//?查询最新10个Apple的价格总和的两倍??select?sum(price*2)?as?sPrice?from?Apple.win:length(10)???//?查询最新10个Apple的价格,并用函数计算后再算平均值??select?avg(Compute.getResult(price))?from?Apple.win:length(10)??函数只能是静态方法,普通方法不可用。即使是事件流里包含的静态方法,也必须用“类名.方法名”的方式进行引用。 可以使用distinct关键字对expression加以约束,表示去掉expression产生的重复的值。默认情况下为all关键字,即所有的expression值都参与聚合运算。例如:[plain] view plaincopy//?查询最新5秒的Apple的平均价格??select?avg(distinct?price)?as?aPrice?from?Apple.win:time(5?sec)???//?假如:5秒内进入了三个Apple事件,price分别为2,1,2。则针对该EPL的平均值为(2+1)/2=1.5。因为有distinct的修饰,所以第二个2不参与运算,事件总数即为2,而不是3。??以上就是聚合函数的使用方法,除此之外需要注意一下几点1.聚合函数能用于Select和Having,但是不能用于Where2.sum,avg,media,stddev,avedev只能计算数值,至于media,stddev和avedev代表什么意思,请自行百度。3.Esper会忽略expression为null不让参与聚合运算,但是count函数除外,即使是null也认为是一个事件。如果事件流集合 中没有包含任何事件,或者包含的事件中用于聚合计算的expression都是null(比如收集5秒内进入的事件即为一个事件流集合),则所有聚合函数 都返回null。2.Group byGroup by通常配合聚合函数使用。语法和SQL基本一样,产生的效果就是以某一个或者多个字段进行分组,然后使聚合函数作用于不同组的数据。简单语法如下:[plain] view plaincopygroup?by?aggregate_free_expression?[,?aggregate_free_expression]?[,?...]??使用Group by要注意一下几点: 1.Group by后面的内容不能包含聚合函数2.Group by后面的内容不能是之前select子句中聚合函数修饰的属性名3.通常情况要保证分组数量有限制,以防止内存溢出。但是如果分组分了很多,就需要使用@Hint加以控制。2.1.Group by基本用法针对上面的第三点,后面再说,先举几个例子说明下简单用法:[plain] view plaincopy//?根据color和size来对10个Apple事件进行分组计算平均price??select?avg(price)?as?aPrice,?color,?size?from?Apple.win:length_batch(10)?group?by?color,size??该句子遵从SQL的标准,如果某个事件的color和size和之前进入的事件的一样,则归为一组,否则新建一组,并计算平均price [plain] view plaincopy//?根据size来对10个Apple事件进行分组计算平均price和color??select?avg(price)?as?aPrice,?color,?size?from?Apple.win:length_batch(10)?grou
原创力文档


文档评论(0)