2015-03-02 51 views
0

我正在使用Esper来汇总我的传感器数据。数据可能以任何间隔到达,即1秒到120秒。每个数据点包含TimeStamp和Value。基于事件启动时间的esper固定窗口

我希望30分钟窗口中的最小时间戳,最大时间戳,平均值和数据点数。 30分钟窗口的起点和终点是固定的,即01:00到01:30,01:30到02:00等

我怎样才能用Esper来实现这个?

+0

我正在使用Java POJO和EPL。 – 2015-03-02 11:54:47

+0

在EPL中有一个crontab定时器。它的工作原理与Unix的crontab类似。这个crontab会是我认为“*/30,*,*,*,*”。该链接是http://esper.codehaus.org/esper-5.1.0/doc/reference/en-US/html_single/index.html#pattern-timer-at – user3613754 2015-03-02 16:28:28

回答

0

因此,例如,请参见 “4.2.7.3 crontab的情境条件。”:

create context Every30Min start (*/30, *, *, *, *) end after 30 min; context Every30Min select count(*) from MyEvent output snapshot when terminated;

+0

此cron基于数据中的系统时间和时间戳可能会延迟(由于网络或其他原因),并且它会根据时区有不同的时间戳。 – 2015-03-03 06:49:38

+0

cron一般基于时间(而不是系统时间)。它基于任何时候你可以通过外部定时器控制,但是你喜欢它。 – user650839 2015-03-05 19:52:19

+0

如果您有延迟的数据,则可以使用“group by”并通过表达式计算组中的30分钟桶。 – user650839 2015-03-05 20:10:15

1

要么

赢:ext_timed_batch(TimeStamp.withTime(TimeStamp.getHourOfDay(),投(TimeStamp.getMinuteOfHour()/ 30,INT)* 30 ,0,0).toMillisec(),30分钟)

或者

赢:ext_timed_batch(TimeStamp.toMillisec() - (TimeStamp.toMillisec()%180万),30分钟) 其中1800000是30分钟(30 * 60 * 1000)的毫秒数

+1

我用同样的方法...时间戳截断到30分钟的时间间隔.. – 2015-03-09 09:03:01