2017-10-11 34 views
0

我最近一直在使用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'。

回答

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; 
+0

你好,谢谢你的回答。 我想我可能不清楚我的问题。 'xxxx'不应该是一个固定的变量。 – Tchak

+0

我们假设当前窗口有3个eventTypes为'eT1','eT2'和'eT3'的事件。然后,如果触发了新事件,则只有当事件类型与“eT1”,“eT2”和“eT3”不同时,才会将其添加到窗口中。 此致敬礼。 – Tchak

+0

注意:尽管我可以使用非最佳解决方案为事件列表中的每个事件'xxxx'写第三行。 – Tchak

相关问题