2015-03-02 49 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