KSQL-更改WINDOW TUMBLING子句中的时区

时间:2018-09-30 03:53:38

标签: apache-kafka confluent ksql

在我的KSQL中使用SELECT子句:

WINDOW TUMBLING

一些结果:

SELECT 
    sale_date,
    region,
    SUM(total)
FROM orders
WINDOW TUMBLING (SIZE 24 HOURS)
GROUP BY sale_date, region;

迄今为止的纪元为:

2018-09-29|+|zskx_fz : Window{start=1538179200000 end=-} | 2018-09-29 | zskx_fz | 16119.8
2018-09-30|+|zskx_fz : Window{start=1538179200000 end=-} | 2018-09-30 | zskx_fz | 2031.6
2018-09-30|+|zskx_fz : Window{start=1538265600000 end=-} | 2018-09-30 | zskx_fz | 894.7

我们可以看到,我在UTC + 8。但是无论时区如何,1538179200000 = 2018-09-29 08:00:00 (UTC+8) 1538265600000 = 2018-09-30 08:00:00 (UTC+8) 日期时间都应start,而不要早8小时。这样可以更改时区吗?

PS:我在2018-09-29 00:00:00尝试了几种窗口大小,但我完全迷失了。.

2018-09-30 11:33:00

2 个答案:

答案 0 :(得分:1)

时间戳窗口始终相对于纪元(UTC / GMT)进行计算。

我可以看到希望根据您的时区按天汇总的有效性。我将其提升为an issue on the KSQL github project,建议您在此处进行跟踪。

答案 1 :(得分:0)

如果您仅使用滚动窗口,则可以将时间视为另一个维度,并在此维度上进行汇总,而根本不使用任何窗口。 这是一个例子。 让我们考虑输入流架构如下:

<sale_date BIGINT, region VARCHAR, total DOUBLE>

假设sale_date是销售的时间戳,而我们的当地时间是PST,则可以使用TIMESTAMPTOSTRING函数为给定时区的每个销售提取不同的时间粒度,如下所示:< / p>

CREATE STREAM foo AS SELECT TIMESTAMPTOSTRING(sale_date, 'yyyy-MM-dd HH', 'PST') AS sale_hour, TIMESTAMPTOSTRING(sale_date, 'yyyy-MM-dd', 'PST') AS sale_day, TIMESTAMPTOSTRING(sale_date, 'yyyy-MM', 'PST') AS sale_month, region, total FROM orders; 现在,您应该能够在此流上编写汇总查询。例如,对于每个区域的每日销售额,您可以编写以下查询:

CRAETE TABLE daily_sale AS SELECT sale_day, region, sum(total) FROM foo GROUP BY sale_day, region;

请注意,您无需为上述查询指定窗口。