Esper epl语句详解

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]保留其最近的一条事件

注解

@注解名字(注解内容)

常用的有@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

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";

注意:以上面的代码片为例,先执行epl3,再执行epl4才不会报错,因为要插入的schema得先定义。同时,表中的字段名与数据类型也要一致。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-02 02:18:37

Esper epl语句详解的相关文章

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /

判断IE版本的HTML语句详解,如:[if lte IE 9]……[endif]

我们常常会在网页的HTML里面看到形如[if lte IE 9]--[endif]的代码,表示的是限定某些浏览器版本才能执行的语句,那么这些判断语句的规则是什么呢?请看下文: <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![endif]--><!--[if IE 6]> 仅IE6可识别 <![endif]--><!--[i

MySQL之SELECT 语句详解

本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的保留字,即为:在高级语言中已定义过的字,使用者不能将这些字作为变量名和过程名使用. 1)SELECT语句的基本格式是:SELECT 查询的列名 FROM 表名 WHERE 限制条件:在上一篇博客创建一个简单的成绩管理系统 中,使用SELECT * FROM employee代表查询所有的列.例如,要

MyBatis的foreach语句详解

MyBatis的foreach语句详解 MyBatis的foreach语句详解 1人收藏此文章, 我要收藏 发表于3个月前 , 已有113次阅读 共0个评论 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,se

【转】MySQL用户管理及SQL语句详解

[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysql.user; +--------+------------+-------------------------------------------+ | user | host | password | +--------+------------+---------------------------

T-SQL_select语句详解

SQL中SELECT语句详解 select语句执行的过程: 先看查询内容 ==>where条件 ==>[分组条件] ==>[分组搜索条件] ==>内容输出 ==>[是否排序] 原文地址:https://www.cnblogs.com/joinbestgo/p/10547910.html

python基础教程:Python中垃圾回收和del语句详解

Python语言默认采用的垃圾收集机制是引用计数法,本文详细的介绍了Python中垃圾回收和del语句详解,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Python中的垃圾回收算法是采用引用计数, 当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收 https://tieba.baidu.com/p/6575202861 a = "larry"b = ahttps://www.douban.com/group/topic/16

Swift流程控制之循环语句和判断语句详解

Swift提供了所有c类语言的控制流结构.包括for和while循环来执行一个任务多次:if和switch语句来执行确定的条件下不同的分支的代码:break和continue关键字能将运行流程转到你代码的另一个点上. 除了C语言传统的for-condition-increment循环,Swift加入了for-in循环,能更加容易的遍历arrays, dictionaries, ranges, strings等其他序列类型. Swift的switch语句也比C语言的要强大很多. Swift中swi

批处理学习:for语句详解

大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录) 六 for /l (计数循环) 一.前言 在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容.遍历文件路径.数值递增/递减等操作成为可能:配合if.call. goto等流程控制语句,更是可以实现脚本复杂的自动化.智能化操作:合理使用for语句,还能使代码大为简化,免除各位编写大