使用 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 个唯一的 EventName,每个唯一的 EventName 出现 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 的结果都是正确的,因为它具有正确的计数和平均值。但是,我得到 10 个结果,而不是每个 EventName 一个结果,总共 150 个结果。
我们希望用 Siddhi 替换 Esper,因此我通过 Esper 运行了类似的查询,并且使用 Esper,在这两种情况下,我都收到了每个 EventName 一个结果的预期输出。