【发布时间】:2022-10-20 16:23:34
【问题描述】:
根据我的研究,Flink SQL 接受“0000-01-01 00:00:00.000000000”作为时间戳格式,但我在 kafka 中的时间戳采用“0000-01-01T00:00:00.000000000”格式,这是由 flink sql 查询引起的失败。
有没有办法将日期的某种常见格式(例如 2022-05-02T18:28:07.881414Z)转换为 flink 中所需的格式?在其他 SQL 语言中,这将是一个非常简单的操作,但是通过阅读 Flink 文档,我看不到这样做的方法。
我尝试进行字符串替换并将字符串转换为时间戳,但它不起作用。我正在运行 Flink 1.13。
我尝试使用 CONVERT_TZ() 但它不适用于字符串时间戳:
这有效:
SELECT
CONVERT_TZ(string_ts, 'UTC', 'America/Los_Angeles') as test_ts
FROM
(VALUES ('2022-05-02 18:28:07.881414Z')) AS NameTable(string_ts);
这不起作用:
SELECT
CONVERT_TZ(string_ts, 'UTC', 'America/Los_Angeles') as test_ts
FROM
(VALUES ('2022-05-02T18:28:07.881414Z')) AS NameTable(string_ts);
这给了我一个时间戳,但我对更改时区不感兴趣。如何将带有替换的字符串转换为可与其他时间戳函数一起使用的时间戳?比如时间戳差异:
SELECT
TO_TIMESTAMP(replace(string_ts, 'T', ' ')) -- gives null
, CONVERT_TZ(replace(string_ts, 'T', ' '), 'UTC', 'America/Los_Angeles') -- works
FROM
(VALUES ('2022-05-02T18:28:07.881414Z')) AS NameTable(string_ts);
如何让 Flink 将 '2022-05-02T18:28:07.881414Z' 识别为时间戳?
【问题讨论】:
标签: sql casting timestamp apache-flink