ksql-change-the-timezone-in-window-tumbling子句

ddrv8njm  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(444)

这里是我的ksql使用 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

到目前为止的时间是:

1538179200000 = 2018-09-29 08:00:00 (UTC+8)
1538265600000 = 2018-09-30 08:00:00 (UTC+8)

我们可以看到,我在utc+8。但不管时区如何, start 日期时间应为 2018-09-29 00:00:00 不是8小时前。所以它能改变时区?
附言:我试了好几种Windows大小的 2018-09-30 11:33:00 我完全迷路了。。

WINDOW TUMBLING (SIZE 1 minutes)    2018-09-30 11:32:00
WINDOW TUMBLING (SIZE 2 hours)      2018-09-30 10:00:00
WINDOW TUMBLING (SIZE 5 hours)      2018-09-30 07:00:00
WINDOW TUMBLING (SIZE 10 hours)     2018-09-30 02:00:00
WINDOW TUMBLING (SIZE 11 hours)     2018-09-30 07:00:00
WINDOW TUMBLING (SIZE 12 hours)     2018-09-30 08:00:00
WINDOW TUMBLING (SIZE 24 hours)     2018-09-30 08:00:00
6za6bjd0

6za6bjd01#

时间戳窗口总是相对于历元(utc/gmt)计算的。
我可以看出,根据你的时区,按天累计是有道理的。我在ksqlgithub项目中提出了这个问题,并建议您在那里跟踪它。

yeotifhr

yeotifhr2#

如果您只使用滚动窗口,您可以将时间视为另一个维度,并在此维度上执行聚合,而不使用任何窗口。下面是一个例子。让我们考虑输入流模式如下: <sale_date BIGINT, region VARCHAR, total DOUBLE> 假设 sale_date 是销售的时间戳,我们的当地时间是pst,我们可以使用 TIMESTAMPTOSTRING 函数为给定时区的每次销售提取不同的时间粒度,如下所示: 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; 请注意,不需要为上述查询指定窗口。

相关问题