我最近一直在与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'。
答案 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;