我们正在使用这样定义的上下文
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);
然而,在某些时候,我们想查询如果我们现在结束上下文,我们可以有多少聚合事件作为输出,以避免内存开销。
我们在 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);
虽然这给出了可能的输出事件计数,但它浪费了迭代所有事件的 cpu 周期。在 esper 中还有其他方法吗?output snapshot当我们将查询更改为from时,上面的迭代器也会给出结果output all