如何为 Esper 查询添加时区?
How can I add timezone to Esper queries?
我正在使用 Esper,我需要按时间戳过滤事件。这些事件来自外部来源。
挑战在于截止时刻与事件的时间戳处于不同的时区,例如截止时间为 3:30 CET(例如布拉格时间),而事件的时间戳字段为 UTC。
这会在时区转换为夏令时时产生问题,因为需要在查询中修改截止时刻。例如。在这种情况下,如果截止时刻是 3:30 CET,在冬季它将在 2:30 UTC,在 DST 期间它将在 1:30 UTC。这意味着我必须在时间进入和离开 DST 时更改查询。
这是当前查询:
SELECT *
FROM my_table
WHERE timestamp_field.after( timestamp.withtime(2,30,0,0) )
我想要一个强大的解决方案,它可以让我免于每隔几个月更改一次截止时间戳查询的麻烦。我可以将时区添加到查询语句本身吗?还有其他解决办法吗?
向表示 UTC 时间的事件添加事件 属性 可能会有所帮助,即将事件时间戳标准化为 UTC 并改用标准化的 属性。
查询还可以使用变量而不是硬编码数字。另一种选择可能是更改 Esper 源以采用某些 func.s
的时区
在尝试在 WHERE 语句或使用模式中尝试未成功后,我设法使用 [单行函数插件][1] 解决了这个问题。
我将截止时间、时区和事件时区传递给插件函数,并计算事件时区中的截止时间。
我的查询更改为:
SELECT *
FROM my_table
WHERE timestamp_field.after( timestamp.withtime(
eventTZHour(2, 'UTC', 'Europe/Prague'), 30, 0, 0) )
我在 class 中添加了 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-singlerow-function 来自 esper 的文档
我正在使用 Esper,我需要按时间戳过滤事件。这些事件来自外部来源。
挑战在于截止时刻与事件的时间戳处于不同的时区,例如截止时间为 3:30 CET(例如布拉格时间),而事件的时间戳字段为 UTC。
这会在时区转换为夏令时时产生问题,因为需要在查询中修改截止时刻。例如。在这种情况下,如果截止时刻是 3:30 CET,在冬季它将在 2:30 UTC,在 DST 期间它将在 1:30 UTC。这意味着我必须在时间进入和离开 DST 时更改查询。
这是当前查询:
SELECT *
FROM my_table
WHERE timestamp_field.after( timestamp.withtime(2,30,0,0) )
我想要一个强大的解决方案,它可以让我免于每隔几个月更改一次截止时间戳查询的麻烦。我可以将时区添加到查询语句本身吗?还有其他解决办法吗?
向表示 UTC 时间的事件添加事件 属性 可能会有所帮助,即将事件时间戳标准化为 UTC 并改用标准化的 属性。 查询还可以使用变量而不是硬编码数字。另一种选择可能是更改 Esper 源以采用某些 func.s
的时区在尝试在 WHERE 语句或使用模式中尝试未成功后,我设法使用 [单行函数插件][1] 解决了这个问题。
我将截止时间、时区和事件时区传递给插件函数,并计算事件时区中的截止时间。
我的查询更改为:
SELECT *
FROM my_table
WHERE timestamp_field.after( timestamp.withtime(
eventTZHour(2, 'UTC', 'Europe/Prague'), 30, 0, 0) )
我在 class 中添加了 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-singlerow-function 来自 esper 的文档