Java Siddhi CEP:使用时间窗口时每组有多个结果

Java Siddhi CEP:使用时间窗口时每组有多个结果,java,complex-event-processing,siddhi,Java,Complex Event Processing,Siddhi,使用siddhi 3.0.3作为Java库 在使用带有时间窗口的group by时,我看到一些意外行为。一般的问题是,我获得了组的正确结果聚合,但我每个事件收到一个聚合结果,而不是每个组收到一个 具体来说, 使用以下查询,没有时间窗口: @info(name = 'RealTimeQuery') from MyEventStream select EventName as EventName, count() as Count, avg(ElapsedTime) as Avg_ElapsedTi

使用siddhi 3.0.3作为Java库

在使用带有时间窗口的group by时,我看到一些意外行为。一般的问题是,我获得了组的正确结果聚合,但我每个事件收到一个聚合结果,而不是每个组收到一个

具体来说,

使用以下查询,没有时间窗口:

@info(name = 'RealTimeQuery') from MyEventStream
select EventName as EventName, count() as Count, avg(ElapsedTime) as Avg_ElapsedTime
group by EventName output snapshot every 30 seconds insert into CEP_Result;
在我的示例中,有15个唯一的事件名,每个唯一的事件名发生10次,总共150个事件。我得到了15个结果,每个EventName对应一个结果,每个结果都有10个计数和正确的平均值,正如我所期望的那样

但是,如果我将时间窗口添加到此查询:

@info(name = 'RealTimeQuery') from MyEventStream#window.time(2 minutes)
select EventName as EventName, count() as Count, avg(ElapsedTime) as Avg_ElapsedTime
group by EventName output snapshot every 30 seconds insert into CEP_Result;
每个EventName的结果都是正确的,因为它具有正确的计数和平均值。但是,我得到的不是每个EventName一个结果,而是10个,总共150个结果


我们希望用Siddhi替换Esper,因此我通过Esper运行了类似的查询,在这两种情况下,我都收到了每个事件名一个结果的预期输出。

这可以通过使用时间批处理窗口[1]而不是时间窗口进行排序。时间窗口是一个滑动窗口,它将从事件接收时间和触发器向后计算窗口时间。在批处理窗口中,它将从第一个事件到达开始计算窗口,并在其过期后发送所有事件。您可以使用WSO2 CEP产品的Siddhi Try it[2]工具,并使用Siddhi查询模拟事件

[1]

[2]