1

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

下图显示了我的意思。我正在使用长度为 4 的时间窗口,我想要 3 个通知,一个在第一个事件进入窗口时,第二个在第二个事件进入时,第三个在第一个事件退出时间窗口时。

在此处输入图像描述

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

这是我到目前为止所拥有的,但是当事件离开窗口时它不会给我通知:@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 会是类似的。

4

1 回答 1

2

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

  1. 当前事件 - 当新事件进入窗口时触发这些事件。即新事件本身被用作触发器
  2. 过期事件 - 当窗口中的现有事件退出时触发这些事件。即在 1 分钟的时间窗口的情况下,每个事件保持 1 分钟并在 1 分钟结束时发出

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

在 CEP 3.1.0 中使用这两种触发器的示例查询将是(查看此处的文档):

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  

如果您希望仅使用过期事件触发此事件,请使用“过期事件”代替“所有事件”。这同样适用于当前事件。如果您不指定任何内容,则默认为当前事件,这就是您当前的查询不会因过期事件而触发的原因。

请注意,对于 CEP 4.0.0,语法有点不同,为了正确的语法,请检查此处的测试源代码(因为文档仍在进行中)。

于 2015-07-17T11:44:26.110 回答