假设我有一系列事件,我希望能够计算出时间窗口中有多少事件。我想在事件进入时间窗口时收到通知并更改计数,当事件退出时间窗口时也是如此。
下图显示了我的意思。我使用长度为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会是相似的。
答案 0 :(得分:2)
从WSO2 CEP中的任何类型的窗口,您可以预期两种类型的事件。
您也可以在同一查询中使用这两者的组合,从两种类型的事件中触发它。
在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'。同样适用于当前事件。如果您没有指定任何内容,则默认为current-events,这就是为什么您的当前查询不会被过期事件触发的原因。
请注意,对于CEP 4.0.0,语法略有不同,正确的语法检查test source codes here(因为文档仍在进行中)。