Esper - 规则发射两次

时间:2015-07-12 19:22:46

标签: esper complex-event-processing

我需要一些关于CEP引擎Esper的帮助: 我写了以下声明:

SELECT clientID FROM MovementEvent.win:time_batch(5 sec) GROUP BY clientID

然后我将MovementEvent发送到引擎中。 5秒后,订户被触发 - 好的。但又过了5秒钟,它再次被触发 - 为什么?

无论我向引擎发送了多少事件,订阅者总是被触发两次 - 在5秒和10秒之后

我希望你能帮助我!

Thanx;)

2 个答案:

答案 0 :(得分:0)

你需要的是:

SELECT clientID FROM MovementEvent.std:groupwin(clientID).win:time_batch(5 sec);

一般情况下,使用GROUP BY而不应用于您选择的属性的聚合函数几乎总会让您措手不及:)。为此,这个陈述也会产生你的期望:

SELECT distinct(clientID) FROM MovementEvent.win:time_batch(5 sec);

此链接可能会更好地解释差异:http://www.espertech.com/esper/release-5.2.0/esper-reference/html/epl_clauses.html#epl-group-by-versus-view

答案 1 :(得分:0)

group-by使其成为聚合,Esper在密钥聚合发生更改时提供输出,即使您未选择聚合也是如此。 你可以做到这一点

select window(*).distinctOf(v=>client) from MovementEvent.win:time_batch(5 sec)