适用模块

实时计算

具体说明

flink sql 中的时区问题

使用示例

flink sql 中通过如下参数进行时区设置,默认使用UTC 时区

set  table.local-time-zone  = 'default'  默认值为defalut

该参数设置会影响当前整个会话时区,例如per-job 模式下,影响当前集群的整个时区。当使用带时区的数据类型,如 TIMESTAMP WITH LOCAL TIME ZONE或带时区的函数 unix_timestamp 等在做输出转换时均会使用当前时区进转换,当然,在flink 内部,任然使用UTC 时区。该参数设置时输入可以是地区全名,例如“America/Los_Angeles”,也可以是自定义时区 ID(时区偏移量),例如“GMT-08:00

举例

设置印度时区

set table.local-time-zone='GMT+05:30';

INFO-FLINK SQL 中的时区转换 - 图1

将utc 格式时间转换为timestamp 时间戳
UTC 时间格式数据样例:2022-10-24T10:45:23Z

select unix_timestamp(replace(replace(ts,'T',' '),'Z',''),'yyyy-MM-dd HH:mm:ss') from test_temp;

INFO-FLINK SQL 中的时区转换 - 图2 INFO-FLINK SQL 中的时区转换 - 图3

to_timestamp 转换不带时区,则转换完毕后依然是数据时间

select to_timestamp(replace(replace(ts,'T',' '),'Z',''),'yyyy-MM-dd HH:mm:ss') from test_temp;

INFO-FLINK SQL 中的时区转换 - 图4

作者 清风徐来