0

我最近一直在使用 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 上添加条件?它是状态 = 'ALARM_END'。

4

1 回答 1

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;
于 2017-10-11T18:42:31.093 回答