Группировка эсперов вызывает дубликаты

У меня есть базовый запрос Esper следующим образом:

@Name("MyTestQuery")
@Description("My First Test Query")
select sum(qty), venue
from MyTestWindow
group by venue

Запрос, кажется, дублирует результаты моей суммы, т.е. если я отправлю количество 10, мой запрос будет срабатывать несколько раз и выводить:

10, 20, 30, 40

Однако, если я удалю группу по функции, она просто выведет 10.

Кто-нибудь может подсказать, почему это может произойти?


person Mike Chinaloy    schedule 26.06.2014    source источник
comment
Похоже, ваше приложение отправляет событие 4 раза   -  person user650839    schedule 26.06.2014


Ответы (4)


Обычно вам нужно квалифицировать имя потока (MyTestWindow) с помощью окна, поэтому оно «из MyTestWindow.win:time(1 sec)». Вам нужно выбрать подходящий тип окна из многих предложений Epser, в зависимости от вашего приложения.

Этот пример:

select sum(qty), venue
  from MyTestWindow.win:time_batch(1 sec)
 group by venue
   having sum(qty) is not null

Вы можете выполнить простой тест на странице http://esper-epl-tryout.appspot.com/epltryout/mainform.html

person noface    schedule 10.07.2014

лучший способ сделать группу - это вызвать искусственное «событие» после отправки всех событий. таким образом, вы можете полностью контролировать то, что вы хотите выводить, и не позволять движку Эспера работать в режиме реального времени.

person benjamin steiner    schedule 14.11.2014

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

person benjamin steiner    schedule 27.01.2015

Вы можете использовать win:time_batch для указанного интервала времени в одном обновлении и функции объединения для обработки значения null

выбрать место, сумма (объединить (ty, 0))

from MyTestWindow.win:time_batch(1 sec)
group by venue
person KianaDi    schedule 06.07.2016