【发布时间】:2020-03-18 01:51:12
【问题描述】:
在 Hive 中,是否有降低毫秒精度(不是舍入)?
例如,我有以下时间戳,小数点后 3 位为毫秒
2019-10-08 21:21:39.163
我想得到精确到小数点后 1 位的时间戳(去掉最后两个毫秒 63):
2019-10-08 21:21:39.1
我只能将时间戳转换为具有一个值精度的小数:
cast(floor(cast(2019-10-08 21:21:39.163 AS double)/0.100)*0.100 AS decimal(16,1)) AS updatetime
这给出了:
1570537299.1
问题:我不知道如何将上述值转回以毫秒为单位的时间戳。更好的是,如果有更好的方法将时间戳精度从小数点后 3 位降低到 1 位,我将不胜感激。
我必须将上述代码转换为十进制的原因是因为如果我只这样做:
floor(cast(2019-10-08 21:21:39.163 AS double)/0.100)*0.100 AS exec_time
这给出了类似的东西:
1570537299.100000001
这不好,因为我需要将这个表 X 与另一个表 Y 连接起来。
表 X 有类似2019-10-08 21:21:39.163 的时间戳。
但是Y表每隔100ms存储一次数据,其时间戳正好是:2019-10-08 21:21:39.1
尾随的 00000001 将阻止来自表 X 的时间戳与表 Y 完全映射
【问题讨论】:
标签: hive timestamp hiveql precision