如何指定从文件中使用时间戳的时间?

时间:2017-02-02 15:35:06

标签: esper nesper

是否可以在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());

1 个答案:

答案 0 :(得分: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);