Hive3.1.3禁止DATE/TIMESTAMP转NUMERIC,如何实现毫秒级时间转数值
Hive 3.1.3 字符串日期转毫秒级数值解决方案
核心实现代码
以下代码完全兼容Hive 3.1.3语法限制,可稳定保留毫秒精度:
-- 入参为字符串格式日期的转换示例 SELECT '2024-01-01 12:34:56.789' AS origin_time_str, -- 转换后毫秒级数值 unix_timestamp(date_format('2024-01-01 12:34:56.789', 'yyyy-MM-dd HH:mm:ss')) * 1000 + CAST(date_format('2024-01-01 12:34:56.789', 'SSS') AS INT) AS time_milliseconds;
如果入参为TIMESTAMP类型(比如当前时间戳),对应代码如下:
SELECT current_timestamp() AS current_time, unix_timestamp(date_format(current_timestamp(), 'yyyy-MM-dd HH:mm:ss')) * 1000 + CAST(date_format(current_timestamp(), 'SSS') AS INT) AS time_milliseconds;
实现逻辑说明
- 全程避免直接将DATE/TIMESTAMP类型转为数值类型,符合Hive 3.1.3的语法规范
- 拆分秒级部分和毫秒部分分别计算后合并:先用
date_format提取秒级时间片段,通过unix_timestamp获取秒级时间戳,乘以1000得到毫秒级基准值 - 单独提取时间中的SSS毫秒位,转为整数后叠加到基准值上,完整保留毫秒精度
- 兼容字符串格式日期、TIMESTAMP类型两种入参场景
内容的提问来源于stack exchange,提问作者codecraker
相关产品推荐
相关产品推荐

