Esper学习笔记二:进程模型

1.UpdateListener

UpdaterListener是Esper提供的一个接口,用于监听某个EPL在引擎中的运行状况,即事件进入并产生结果后会通知UpdateListener。数组

接口以下:spa

package com.espertech.esper.client;
 
import com.espertech.esper.client.EventBean;
 
public interface UpdateListener
{
    public void update(EventBean[] newEvents, EventBean[] oldEvents);
}

接口中就包含一个update方法,该方法有两个参数newEvents和oldEvents。两个参数均是EventBean数组。EventBean中有一个最经常使用的get方法用户获取EPL中字段的值。.net

//EPL语句
select name,age,avg(age) as avgAge from myEvent
eventBean.get("name")//获取name属性
eventBean.get("age")//获取age属性
eventBean.get("avgAge")//获取平均年龄属性

2.Insert 和 Remove

insert表示进入引擎,remove表示移除引擎。事件在Esper中会由于某类EPL会经历这两种状态。对应于UpdateListener接口就是newEvents和oldEvents,由于处于这两种状态的事件不必定只有一个,因此newEvents和oldEvents就是数组形式。code

今后图能够看出,随着时间推移,每一个进入到引擎的W事件都是newEvents,即Insert Stream。W后括号里的值为属性值,可忽略。blog

默认状况下EPL是不会讲数据写入oldEvents中的。接口

看下面EPL例子队列

select irstream  name,age,avg(age) as avgAge from myEvent.win:length(5)

 由图可知,length window可存放w1,w2等事件,在w6事件进入以前,每一个事件进入都属于newEvents。直到w6进入后,length window不能容纳w1~w6的事件,必须把w1事件移出,即w1为oldEvents。length window就像一个队列,每当事件进入队列时,就会触发updateListener并告知有新事件进入。当队列满了,再进入一个新事件时,Esper会触发UpdateListener告知有新事件进入而且有旧事件移出,正如上图所示的w6和w1。事件

3.Filter and Where

EPL有两种过滤事件的方式,一种是过滤事件进入view(能够把view理解为一个窗口),即Filter。另外一种是让事件都进入view,但不触发UpdateListener,即Where子句。rem

Filter:过滤知足条件事件进入view

select name,age,avg(age) as avgAge from myEvent(amount>200).win:length(5)

从图上能够看出,只有amount大于200,Esper才容许Apple事件进入view,而且做为一个newEvent触发UpdateListener。get

Where:全部事件都进入view

select name,age,avg(age) as avgAge from myEvent.win:length(3) where amount>200

从上图能够看出,全部事件都会进入view,只有知足条件事件才能进入newEvent。

其实单看两个EPL,就能发现一个过滤是在进入view前,一个过滤是在view后,因此你们在应用的时候要注意。

4.Aggregation and Grouping

以前说过EPL是类SQL语法,因此也会有聚合和分组的功能。语法和SQL基本同样。

//长度窗口内,计算平均数
select name,age,avg(age) as avgAge from myEvent.win:length(3)
//长度窗口内,计算年龄总和
select name,age,sum(age) as sumAge from myEvent.win:length(3)
//长度窗口内,按照姓名和年龄统计
select name,age,sum(age) as sumAge from myEvent.win:length(5) group by name,age
//长度窗口内,按照姓名分组统计,不一样年龄数量
select name,count(distinct(age)) as counts from myEvent.win:length(5) group by name

 

转载:https://blog.csdn.net/luonanqin/article/details/10714687

相关文章
相关标签/搜索