0

在 Esper 中是否可以从输入中管理时间戳。我使用的文件如下所示:

143 Sat Sep 12 14:43:05 CEST 2009
149 Sat Sep 12 14:43:06 CEST 2009
149 Sat Sep 12 14:43:09 CEST 2009
143 Sat Sep 12 14:43:10 CEST 2009
149 Sat Sep 12 14:43:12 CEST 2009
143 Sat Sep 12 14:43:15 CEST 2009
149 Sat Sep 12 14:43:15 CEST 2009
149 Sat Sep 12 14:43:18 CEST 2009
143 Sat Sep 12 14:43:20 CEST 2009
149 Sat Sep 12 14:43:21 CEST 2009

如何配置 Esper 以便可以使用

select * from Timer.win:time_batch(5 sec)

这样我得到这样的结果:

143 Sat Sep 12 14:43:05 CEST 2009
149 Sat Sep 12 14:43:06 CEST 2009
149 Sat Sep 12 14:43:09 CEST 2009
143 Sat Sep 12 14:43:10 CEST 2009

编辑:

config.getEngineDefaults().getThreading().setInternalTimerEnabled(false);

runtime.sendEvent(new CurrentTimeEvent(0));
engine.getEPAdministrator().createEPL("create context NineToFive start (0, 9, *, *, *) end (0, 17, *, *, *)");

然后我解析我的数据集并发送事件,如下面的答案所述:

long eventTime = userByDate.get(i).getSdf().getTime();

runtime.sendEvent(new CurrentTimeSpanEvent( eventTime ));
runtime.sendEvent(new Event());
4

1 回答 1

0

步骤是,从使用外部计时器的 EPServiceProviderManager 获取引擎实例:

Configuration config = new Configuration();
config.getEngineDefaults().getThreading().setInternalTimerEnabled(false);
EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config);

拥有引擎实例后,调用它。这会将开始时间设置为零。

epService.getEPRuntime().sendEvent(new CurrentTimeEvent(0));

然后创建您的 EPL 语句。

然后,对于每一行,解析日期,解析事件数据,提前时间,并像这样发送事件:

long eventTime = parseDate(...);
SomeEvent someEvent = parseEvent(...);
epService.getEPRuntime().sendEvent(new CurrentTimeSpanEvent(eventTime));
epService.getEPRuntime().sendEvent(someEvent);
于 2017-02-02T16:28:26.983 回答