Esper:向Time-Accumulating窗口添加一个事件,为属性提供了一个条件

时间:2017-10-11 16:15:34

标签: time esper epl

我最近一直在与Esper合作,而且我在文档中遗漏了一个功能,但它可能存在。

我想存储一些事件,直到没有人弹出15秒,并且当它发生时将它们全部释放。

一个查询就是这样做的,它是:

select rstream * from MyEvent.win:time_accum(15 sec)

我可以在MyEvent上添加条件,如

select rstream * from MyEvent where status = 'ALARM_END'.win:time_accum(15 sec)

这完美有效。

现在我想在eventType属性上添加一个条件,说明:

如果使用eventType xxxx触发了一个新事件但是窗口中已经有一个eventType为xxxx的事件,那么不要将这个新的弹出事件添加到窗口中(因此不要将秒表从0到15秒停止)

有办法吗?

非常感谢!

编辑:

更深入地了解我的需求和ESPER文档,我认为我的需求更加满意

select * from MyEvent.win:time_length_batch(15 sec, 2)

我认为我不需要rstream,因为我只想积累1或2个元素并在数组中一次性获取它们(新事件很好)。

但是,是否可以在第一个(也是第一个)MyEvent进入窗口时添加一个条件?它是status ='ALARM_END'。

1 个答案:

答案 0 :(得分:0)

您可能有一个命名窗口并在插入之前检查它。

// define named window
create window MyEventWindow#time_accum(15) as MyEvent;

// insert events that don't have 'xxx'
insert into MyEventWindow select * from MyEvent(eventType != 'xxx');

// insert events that have 'xxx' only if not already there
insert into MyEventWindow select * from MyEvent(eventType = 'xxx') 
  where not exists(select * from MyEventWindow where eventType='xxx');

// usual select
select rstream * from MyEventWindow;