开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink这个是什么情况?

Flink这个是什么情况?我们的mysql 数据库、flink、hologres 的时区是东八区,里面所有的表的timestamp类型的时间都是存的UTC 时间,现在通过Flink的cdas 语法同步到hologres 里面以后,都变成timestamptz类型,hologres里面直接就将UTC的时间显示为东八区了,这样就与实际的时间少了8小时,有什么办法能够将这个时间在同步的时候转回来吗?
例:mysql 2023-01-17 10:15:07(timestamp) 是UTC 时间,对应东八区时间应该是2023-01-17 18:15:07,但是通过flink的cdas 同步到hologres 后,hologres 显示为2023-01-17 10:15:07+08(timestamptz类型),实际应该显示为2023-01-17 18:15:07。

展开
收起
三分钟热度的鱼 2023-10-07 13:20:48 84 0
1 条回答
写回答
取消 提交回答
    • 在Flink会话中设置本地时区为东八区。
    • 在Flink SQL中使用CAST函数将TIMESTAMP类型转换为TIMESTAMP_LTZ类型。
    • 在Hologres中使用TO_TIMESTAMP函数将TIMESTAMP_LTZ类型转换为TIMESTAMP类型。

    Flink SQL> SET 'table.local-time-zone' = 'Asia/Shanghai';
    Flink SQL> SELECT CAST('2023-01-17 10:15:07' AS TIMESTAMP(3)) AS t;
    +-------------------------+
    | t |
    +-------------------------+
    | 2023-01-17 10:15:07.000 |
    +-------------------------+
    Flink SQL> SELECT CAST('2023-01-17 10:15:07' AS TIMESTAMP_LTZ(3)) AS t;
    +---------------------------+
    | t |
    +---------------------------+
    | 2023-01-17 10:15:07.000Z |
    +---------------------------+
    Hologres> SELECT TO_TIMESTAMP('2023-01-17 10:15:07.000Z', 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') AS t;
    +-------------------------+
    | t |
    +-------------------------+
    | 2023-01-17 18:15:07.000 |
    +-------------------------+

    2023-10-12 09:13:29
    赞同 1 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
阿里云MaxCompute百问百答 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载