我使用以下impala查询从my_table中提取数据:
select id, timestamp, unix_timestamp(timestamp) as ts from my_table
输出结果为:
id timestamp ts
-------------------------------------------------------
0 A 2016-08-21 16:18:34.336 1471796314
1 A 2016-08-21 16:18:34.517 1471796314
2 A 2016-08-21 16:18:34.677 1471796314
3 B 2016-08-14 00:20:00.641 1471134000
4 B 2016-08-14 00:20:00.697 1471134000
5 B 2016-08-14 00:20:00.720 1471134000
6 B 2016-08-14 00:20:00.750 1471134000
转换后的ts
字段变得完全相同,因为原始时间戳差异非常小。有没有一种方法(一种功能)可以使ts
使用更高的数字(准确度)?如果原始时间戳不同,我需要每个ts
不同。谢谢!
答案 0 :(得分:0)
使用最近版本的Impala [警告如下] ,您应该能够提取毫秒数并重新构建更精确的时间戳。
警告 - Cloudera documentation表示millisecond()
功能在CDH 5.7.0中可用,显然不是这种情况。
SELECT Unix_Timestamp(timestamp)*1000 +Millisecond(timestamp) AS ts FROM wtf
顺便说一句,对时区要非常小心。 Impala假设所有时间戳都以UTC形式提供,因此如果您的数据来自多个数据中心 - 或者来自应用DST的数据中心 - 您的精度损失是小时,而不是毫秒...