Esper:添加一个事件到Time-Accumulating窗口提供了一个条件属性
问题描述:
我最近一直在使用Esper,并且有一个我在文档中遗漏的功能,但它可能存在。Esper:添加一个事件到Time-Accumulating窗口提供了一个条件属性
我想存储一些事件,直到没有人弹出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进入窗口时添加一个条件?这是状态='ALARM_END'。
答
您可能有一个命名窗口,并在插入之前检查该窗口。
// 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;
你好,谢谢你的回答。 我想我可能不清楚我的问题。 'xxxx'不应该是一个固定的变量。 – Tchak
我们假设当前窗口有3个eventTypes为'eT1','eT2'和'eT3'的事件。然后,如果触发了新事件,则只有当事件类型与“eT1”,“eT2”和“eT3”不同时,才会将其添加到窗口中。 此致敬礼。 – Tchak
注意:尽管我可以使用非最佳解决方案为事件列表中的每个事件'xxxx'写第三行。 – Tchak