Мы используем контекст, определенный следующим образом:
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