You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FlinkSQL中将无时区TIMESTAMP(3)列转为BIGINT(无需自定义UDF)

FlinkSQL中TIMESTAMP(3)转BIGINT的无UDF实现方案

不需要编写自定义UDF,用Flink SQL内置函数就能完成转换,以下是几种实用方案:

  • 直接CAST转换(最简洁)
    Flink SQL支持将TIMESTAMP类型直接转为BIGINT,转换后得到的是从1970-01-01 00:00:00.000到目标时间的毫秒数,刚好匹配TIMESTAMP(3)的精度。
    示例SQL:
SELECT CAST(max_updated AS BIGINT) AS max_updated_ts
FROM your_table;

以你提供的示例值2024-11-04T22:04:17.793测试,转换后会得到对应的毫秒时间戳(如1730733857793)。

  • 拆分秒和毫秒拼接(逻辑更透明)
    如果需要明确拆分时间的秒级和毫秒部分,可以用UNIX_TIMESTAMP获取秒级时间戳,再加上提取的毫秒值:
SELECT UNIX_TIMESTAMP(max_updated) * 1000 + EXTRACT(MILLISECOND FROM max_updated) AS max_updated_ts
FROM your_table;

这个方法和CAST的结果完全一致,适合需要清晰展示转换逻辑的场景。

  • 涉及时区的处理(可选)
    由于你的列是非时区类型(no LTZ),如果需要基于特定时区(比如UTC)转换时间戳,可以先转成带时区的类型再转换:
-- 假设本地时区为Asia/Shanghai,转换为UTC时间的毫秒戳
SELECT CAST(CONVERT_TZ(max_updated, 'Asia/Shanghai', 'UTC') AS BIGINT) AS max_updated_ts_utc
FROM your_table;

注意:Flink 1.12及以上版本都支持上述转换逻辑,确保你的集群版本符合要求。

内容的提问来源于stack exchange,提问作者Faisal Ahmed Siddiqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:52:09