EPL,Event Process Language,事件处理语言。类似于SQL,描述了esper要分析的内容。

统计窗口

以下为常用窗口。

win:length(size)//攒够size条数据后触发UpdateListener()函数。滑动窗口,攒满之后新来一个移除一个,并触发。
win:length_batch(size) //攒够size条数据后触发,并清空队列。再攒满了再触发。
win:time(time period)//第一次触发在period秒后,然后每一秒触发一次。
win:time_batch(time period) //每period秒触发一次。
win:keepall()//无参数,记录所有进入的数据,除非使用delete操作,才能从窗口移出数据。
std:unique(criteria)//对不同的criteria[例如:id]保留其最近的一条事件

字符串操作

与标准SQL类似。支持 like '%' 这样的模糊查询。

不支持 LENGTH(str),可以用 string.length() 函数替代,见下行。

select * from appTable.win:time(5 sec) as a where a.price.length() < 3 

注解

@注解名字(注解内容)
常用的有 @Hint,用于限制Group by的生存时间,使虚拟机能及时回收内存。这两个属性分别为reclaim_group_aged和reclaim_group_freq。例子见下:

// 根据color对10秒内进入的Apple事件进行分组计算平均price。对8秒内没有数据更新的分组进行回收,每2秒回收一次
@Hint('reclaim_group_aged=8,reclaim_group_freq=2')select avg(price) as aPrice, color from Apple.win:time(10 sec) group by color

@Priority,指定EPL的优先级,参数只有一个,为整数,可负可正。例如:@Priority(10)。

连接

// 当老师的id和学生的id相同时,查询学生的姓名和老师的姓名
select s.name, t.name from Student.win:time(10) as s inner join  Teacher.win:time(10) as t on s.id=t.id

类似的,esper也支持left outer join。

Unidirectional Join

join的事件都需要data window或者view修饰,目的是为了暂存事件以便等待满足条件的事件并执行join。如果想让某个事件到来时直接触发join,不需要暂存,也就是不需要data window或者view修饰,则需要加上一个特殊关键字——unidirectional。

output

Output是EPL中非常有用的东西,用来控制Esper对事件流计算结果的输出时间和形式,可以以固定频率,也可以是某个时间点输出。

// 30分钟内,每进入一个OrderEvent,统计一次sum price,并且每60秒输出一次统计结果。
select sum(price) from OrderEvent.win:time(30 min) output snapshot every 60 seconds
// 30分钟内,每进入一个OrderEvent,统计一次sum price,并且每60秒输出第一次的统计结果。
select sum(price) from OrderEvent.win:time(30 min) output first every 60 seconds 

insert into

把一个事件流的计算结果放入另一个事件流,然后可以对这个事件流进行别的计算。所以Insert into的一个好处就是可以将是事件流的计算结果不断级联,对于那种需要将上一个业务的结果数据放到下一个业务处理的场景再适合不过了。

//insert into 示例
String epl3="create schema UBTInfo as (`ip` string, `url` string, `userAgent` string)";
String epl4="create schema UBTInfoCounter as (`ip` string, `counts` long)";
String epl5="insert into `UBTInfoCounter` select table1.ip as ip,count(*) as counts from `UBTInfo`.win:time_batch(10 sec) as table1 group by table1.ip";

注意:以上面的代码片为例,若不执行epl4,执行epl5也不会报错,因为要插入的schema不必先定义!

insert into也可以绑定listener。可以在实现接口的方法中调用 newEvent.get("_attribute")。
insert into A from B后,B中盛放事件的队列不受影响

Esper epl语句详解相关推荐

  1. mysql explain语句_Mysql explain 语句详解

    explain 语句详解 explain 写在 select 前,如下 mysql> explain select * from user_info where id = 2\G ******* ...

  2. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  3. Java教程:Java continue语句详解

    Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...

  4. smarty手册-smarty中foreach循环语句详解

    原文地址:smarty手册-smarty中foreach循环语句详解作者:谭博 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其 ...

  5. 教妹学Java(十四):switch 语句详解

    大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.本篇文章通过我和三妹对话的形式来谈一谈"switch 语句". 教妹学 Java,没见过这么有趣的标题吧?&q ...

  6. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

  7. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  8. mysql的load data_【MySQL】load data语句详解(一)

    作者  罗小波 沃趣科技高级MySQL数据库工程师 load data语句详解 背景 数据库版本:MySQL 5.7.18 服务器信息:本地到处导入在10.10.30.241上演示,local远程导入 ...

  9. 【Linux】shell脚本实战-if多分支条件语句详解

    文章目录 前言 多分支语句的语法 多分支语句举例: 1. 出嫁的条件 2. 管理http服务实战脚本 3. 猜数字游戏v1版本-if版本 总结 前言 前面我们已经学习过单分支语句和双分支语句的使用. ...

最新文章

  1. nginx反向代理相关 负载均衡及优化
  2. 普通卷积armv7-neon指令集实现—QNNPACK
  3. 使用Apache POI插入内容
  4. 一、织物组织相关基本概念
  5. jquery在线预览PDF文件,打开PDF文件
  6. php安装sqlserver2008,php53 mssql2008_sqlserver2008安装环境_php mssql库
  7. (cljs/run-at (JSVM. :all) 一次说白DataType、Record和Protocol) 1
  8. 使用pscp在Linux、Windows间互传文件
  9. 两年数据对比柱形图_对比数据还在用千篇一律的柱形图?试试wifi对比图,让人过目不忘...
  10. python爬取电影票房网并保存csv
  11. AES-128 加解密算法实现
  12. centos配置虚拟主机(站点)
  13. 【02】Java进阶:09-冒泡排序、选择排序、二分查找、异常、异常的产生和处理、自定义异常、多线程
  14. 自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天
  15. 基于微信小程序的爱生活爱乐餐订餐外卖系统#毕业设计
  16. 浏览器网页谷歌翻译-使用js脚本
  17. QtSpeech会让Qt说话
  18. DataGrip的简单设置及使用
  19. 对众测平台的深度分析
  20. java多个pdf合成一个pdf

热门文章

  1. 我拿到了北京户口!却是跌落的开始....
  2. 无法启动Outlook,无法打开Outlook窗口的解决方法
  3. 《少年的你》首映 易烊千玺坦言哭戏最有挑战
  4. 简单有效的多标准中文分词详解
  5. DFT(离散傅里叶变换)
  6. html 特殊字符 三角形,特殊字符
  7. 网络标准(从一类线到八类线)
  8. c语言系统通常将一个判断为真,C语言程序设计学习-习题2
  9. 唐纳德与子串 Hard
  10. Oracle INSERT 语句