我们正在使用这样定义的上下文
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中尝试了Iterator
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
output all
时,迭代器也会给出结果Esper不会保留任何事件,因为没有声明任何数据窗口。因此,迭代器不会迭代所有事件。