Esper系列(三)Context和Group by
Context
把不同的事件按照框的规则框起来(规则框在partition by中定义),并且有可能有多个框,而框与框之间不会互相影响。
功能:
组合事件查询并进行分组,类型:Hash Context、Category Context、Non-Overlapping Context。
格式:
1 | create context context_name partition [by] event_property [and event_property [and ...]] |
2 | from stream_def [, event_property [...] |
3 | from stream_def] [, ...] |
例子:
1 | // 创建context |
2 | create context ctEvent partition by name from orderEvetn; |
3 | |
4 | // 统计最近两秒内各context区间中事件salary值的总和 |
5 | String epsql = "context ctEvent select sum(salary) as result from orderEvent.win:time(2 sec)"; |
1 | // 当context各区间中存在事件个数非0且为2的整数倍时,统计该区间事件属性最近两个事件salary属性的总和,这里2由win:length_batch(2)指定; |
2 | String epsql = "context ctEvent select sum(salary) as result from orderEvent.win:length_batch(2)"; |
3 |
说明:
win:length_batch(num):该标识限定事件个数必须非0且为num的整数倍时就触发监听,并对最近num个事件进行对应的处理。
win:length(num):该标识作用于最近的num个事件,没有达到num个数监听也会被触发。
win:length(num)与win:length_batch(num)相比后者相当于在前者的基础上增加了一个批处理设置,num个数达到后才进行处理。
win:time(time):该标识处理最近的time时间内的事件。
win:time_batch(time):该标识符与win:length_batch(num)类似不过这里是时间。
作用:
根据定义context中指定的属性对事件流中属性值进行分类,结合EPL语句运行时将针对分类的结果进行分析运算。
多个事件流的context, 每个流的中用于context的属性的数量要一样,数据类型也要一致。
Context各属性字段描述表
Name:Context名称;
ID:引擎自动为context分配从0开始依次递增,context作用的事件流,同一属性类型的事件流ID值相同;
Key1~keyN:分别对应context作用于事件流的各个属性字段;
Group by
格式:
1 | group by aggregate_free_expression [, aggregate_free_expression] [, ...]; |
注意:group by后面不能包含聚合函数,也不能是select子句中聚合函数修饰的属性名;
功能:
group by的对象就是一个值(属性字段也是值),以相同的值进行分组;
使用Group by的时候,会遇到分组数量太多的情况。比如以时间单位进行分组,那么内存使用一定是一个大问题。因此@Hint为其设计了两个属性,用于限制Group by的生存时间,使虚拟机能及时回收内存。这两个属性分别为reclaim_group_aged和reclaim_group_freq;
1 | // 以name进行分组,对最近3 秒内的事件取salary属性的平均值,@Hint('reclaim_group_aged=1')表示在1秒内对没有更新数据的分组进行回收, reclaim_group_aged后面值的单位是秒; |
2 | String epsql = "@Hint('reclaim_group_aged=1')select avg(salary) as result from orderEvent.win:time(3 sec) group by name"; |
1 | // 以name进行分组,对最近3 秒内的事件取salary属性的平均值,@Hint('reclaim_group_aged=2,reclaim_group_freq=1')表示对两秒内对没有更新数据的分组进行回收,每1秒查探回收一次(防止数据量大的时候内存溢出) |
2 | String epsql = "@Hint('reclaim_group_aged=2,reclaim_group_freq=1')select avg(salary) as result from orderEvent.win:time(3) group by name"; |
Having
与SQL作用类似,where子句中不能包含聚合函数,而Having的作用就是针对这种应用的处理。
Esper系列(三)Context和Group by的更多相关文章
- ldap配置系列三:grafana集成ldap
ldap配置系列三:grafana集成ldap grafana的简介 grafana是一个类似kibana的东西,是对来自各种数据源的数据进行实时展示的平台,拥有这牛逼的外观.给一个官方的demo体验 ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- MySQL并发复制系列三:MySQL和MariaDB实现对比
http://blog.itpub.net/28218939/viewspace-1975856/ 并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- linux磁盘管理系列三:LVM的使用
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
- 使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)
使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有 ...
- 很有用的PHP笔试题系列三
1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION 与 COOKIE的区别是什么,请从 ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
随机推荐
- python中 “与,或,异或”
在python编程语言里面: 按位的运算,都按位的运算,都是把参加运算的数的二进制形式进行运算. 1.与运算:A与B值均为1时,A.B与的运算结果才为1,否则为0 (运算符:&) 2.或运算: ...
- Python中map,filter,reduce,zip的应用
事例1: l=[('main', 'router_115.236.xx.xx', [{'abc': 1}, {'dfg': 1}]), ('main', 'router_183.61.xx.xx', ...
- hdu 2594 Simpsons’ Hidden Talents KMP应用
Simpsons’ Hidden Talents Problem Description Write a program that, when given strings s1 and s2, fin ...
- org.springframework.orm.jpa.JpaTransactionManager
[第九章] Spring的事务 之 9.2 事务管理器 ——跟我学spring3 http://sishuok@com/forum/blogPost/list/0/2503.html
- cocos2dx3.4 保存json文件
头文件: #include "json/document.h" #include "json/stringbuffer.h" #include "js ...
- 用JavaScript获取一个超链接的绝对URL地址
对于Web程序员来说,处理简单的URL格式也许会成为一场噩梦.试想一下,一个网址里有很多组成部分都会影响你对它的解析方法: 是否以/字符开头 是否以//开头 是否以?号开头 是否以#号开头 …等等 当 ...
- 对 APM 用户的一次真实调查分析(上)
一.前言 国内的 APM 行业这两年刚刚起步,但是在国外却比较成熟了,并且由于这两年人力成本的快速提高,国内外涌现了几家非常不错的 APM 企业,例如,OneAPM,APPdynamic,Dynami ...
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- 简单的Ajax例子
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...