如何将时区添加到Esper查询中



我正在使用Esper&我需要按时间戳过滤事件。这些事件来自外部。

挑战在于,截止时刻与事件的时间戳在不同的时区,例如,截止时刻在欧洲中部时间3:30(例如布拉格时间),而事件的时间戳记字段在UTC。

当时区转换为夏令时时,这会带来问题,因为需要在查询中修改截止时刻。例如,在这种情况下,如果截止时间是欧洲中部时间3:30,那么在冬季,截止时间是协调世界时2:30,在夏令时,截止时间为协调世界时1:30。这意味着当时间转换为夏令时和夏令时之外时,我必须更改查询。

这是当前的查询:

SELECT * 
FROM   my_table
WHERE  timestamp_field.after( timestamp.withtime(2,30,0,0) ) 

我希望有一个强大的解决方案,可以省去每隔几个月更改一次截止时间戳查询的麻烦。我可以将时区添加到查询语句本身吗?还有其他解决方案吗?

将事件属性添加到表示UTC时间的事件中可能会有所帮助,即将事件时间戳规范化为UTC,然后使用规范化属性。查询也可以使用变量而不是硬编码的数字。另一种选择可能是更改Esper源,以获取某些函数的时区。s

在WHERE caluse中尝试或使用Pattern失败后,我使用[Single Row Function plugin][1]解决了这个问题。

我通过插件函数的截止时间,时区&事件时区,并计算事件时区中的截止时间。

我的查询更改为:

SELECT * 
FROM   my_table
WHERE  timestamp_field.after( timestamp.withtime(
       eventTZHour(2, 'UTC', 'Europe/Prague'), 30, 0, 0) ) 

我在一个类中添加了Java实现:

public class EsperPlugins {
    public int eventTZHour(int hour, String eventTZ, String cutoffTZ) {
       // return tz calculations
    }
}

并最终在esper.cfg.xml:中注册了插件

<esper-configuration>
    <plugin-singlerow-function name="eventTZHour"
         function-class="EsperPlugins"
         function-method="eventTZHour"/>
</esper-configuration>

[1] :http://www.espertech.com/esper/release-5.2.0/esper-reference/html/extension.html#custom-esper文档中的单行函数

相关内容

  • 没有找到相关文章

最新更新