Запрос возможного количества выходных событий в контексте для оператора - PullRequest
0 голосов
/ 30 октября 2019

Мы используем контекст, определенный следующим образом:

private static final String context = "create context oneHour start(0,*,*,*,*,0) end(59,*,*,*,*,59)";

, и мы используем epConfig.getEngineDefaults().getThreading().setInternalTimerEnabled(false); для отключения внутренних часов

наше утверждение полностью агрегировано

 @Hint('enable_outputlimit_opt') context oneHour select sum(pkt), ts, region from com.events group by ts,region output all when terminated

Мы начинаем контекст с engine.getEPRuntime().sendEvent(new CurrentTimeSpanEvent(event.getTs())); и затем отправляем нормальные события, такие как

engine.getEPRuntime().sendEvent(event);

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

Мы попробовали Итератор в esper

SafeIterator<EventBean> iterator = statement.safeIterator();
      int i = 0;
      while(iterator.hasNext()) {
        i++;
        EventBean bean = iterator.next();
        Object underlaying = bean.getUnderlying();
        System.out.println(underlaying);
      }
 System.out.println("Agg events " + i);

Хотя это дает внутреннюю часть возможных выходных событий, но это тратит впустую циклы ЦП итерации по всем событиям. Есть ли другой способ для этого в esper? Также выше итератор дает результат, когда мы меняем запрос на output snapshot с output all

1 Ответ

0 голосов
/ 02 ноября 2019

Esper не сохраняет никаких событий, так как нет объявленного окна данных. Поэтому итератор не выполняет итерацию по всем событиям.

...