Impala内置函数:unix_timestamp函数不够准确

时间:2016-11-15 22:27:40

标签: impala built-in

我使用以下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不同。谢谢!

1 个答案:

答案 0 :(得分:0)

使用最近版本的Impala [警告如下] ,您应该能够提取毫秒数并重新构建更精确的时间戳。
警告 - Cloudera documentation表示millisecond()功能在CDH 5.7.0中可用,显然不是这种情况。

SELECT Unix_Timestamp(timestamp)*1000 +Millisecond(timestamp) AS ts FROM wtf

顺便说一句,对时区要非常小心。 Impala假设所有时间戳都以UTC形式提供,因此如果您的数据来自多个数据中心 - 或者来自应用DST的数据中心 - 您的精度损失是小时,而不是毫秒...