如何在 CEP 中实现连续时间 window?

How do I implement a continuous time window in CEP?

假设我有一个事件流,我希望能够计算一次有多少个事件 window。我希望每当事件进入时间 window 并更改计数时收到通知,当事件退出时间 window 时也是如此。

下图说明了我的意思。我正在使用长度为 4 的时间 window,我想要 3 个通知,一个是第一个事件进入 window 时,第二个是第二个事件进入,第三个是第一个事件退出时间window.

我如何进行这样的查询?如果我还想按事件的 属性 分组怎么办?

这是我目前的情况,但当活动离开 window 时它不会给我通知:@config(async = 'true') define stream myStream (symbol string, timeStamp long) @info(name = 'query1') from myStream#window.externalTime(timeStamp,10 sec) select symbol, timeStamp, count(timeStamp) as eventCount group by symbol insert into outputStream。这是针对 SIddhi CEP 的,但我想 Esper 也差不多。

WSO2 CEP 中任何类型的 window,您都可以期待两种类型的事件。

  1. 当前事件 - 这些事件在新事件进入 window 时触发。即新事件本身用作触发器
  2. 过期事件 - 这些事件在 window 中的现有事件退出时触发。即如果时间 window 为 1 分钟,每个事件将保留 1 分钟并在 1 分钟结束时发出

您还可以在同一个查询中结合使用这两种类型的事件来触发这两种类型的事件。

在 CEP 3.1.0 中使用两种触发器的示例查询将是(检查 docs here):

from StockExchangeStream[symbol == 'WSO2']#window.time( 1 minute ) 
select max(price) as maxPrice, avg(price) as avgPrice, min(price) as minPrice
insert into WSO2StockQuote for all-events  

如果您希望仅使用过期事件触发它,请使用 'expired-events' 代替 'all-events'。这同样适用于时事。如果您不指定任何内容,它默认为当前事件,这就是为什么您的当前查询不会因过期事件而被触发。

请注意,对于 CEP 4.0.0,语法有点不同,要检查正确的语法,请检查 test source codes here(因为文档仍在进行中)。