Эспер - правило срабатывает дважды

Мне нужна помощь по движку CEP Esper: я написал следующее заявление:

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

А затем я отправил в движок MovementEvent. через 5 секунд срабатывает подписчик - ок. Но еще через 5 секунд он снова срабатывает - почему?

Сколько бы событий я ни посылал в движок, подписчик всегда срабатывает дважды - через 5 и 10 секунд

Я надеюсь, что вы могли бы мне помочь!

Спасибо ;)


person user2352052    schedule 12.07.2015    source источник


Ответы (2)


Вам нужно следующее:

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

person xpa1492    schedule 16.07.2015

Группировка делает это агрегацией, а Esper обеспечивает вывод, когда происходит изменение агрегации для ключей, даже если вы не выбираете агрегации. Вы могли бы сделать это

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