【问题标题】:Impala built-in function: unix_timestamp function is not accurate enoughImpala 内置函数:unix_timestamp 函数不够准确
【发布时间】:2016-11-15 22:27:39
【问题描述】:

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

【问题讨论】:

    标签: impala built-in


    【解决方案1】:

    使用 最近 版本的 Impala[警告如下],您应该能够提取毫秒并重建更精确的时间戳。
    警告- Cloudera documentation 声明 millisecond() 函数在 CDH 5.7.0 中可用,但显然不是这样。

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      相关资源
      最近更新 更多