0

我们正在使用这样定义的上下文

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

4

1 回答 1

0

Esper 没有保留任何事件,因为没有声明数据窗口。因此迭代器不会迭代所有事件。

于 2019-11-02T13:41:08.417 回答