【问题标题】:Get milisecond from Timestamp im Impala从 Impala 中的时间戳获取毫秒
【发布时间】:2025-12-05 06:00:02
【问题描述】:

我有一个查询,我需要以毫秒为单位提取时间戳以匹配来自 Source 的数据。 下面是来自 SQL 服务器(源)的示例数据,列定义为日期时间

U_Date
2007-10-26 10:07:00.000
2005-05-04 11:12:54.297
2004-05-29 03:56:24.792

目标是通过 Impala 的 Hadoop 并定义为时间戳

U_Date
2007-10-26 10:07:00
2005-05-04 11:12:54.297000000
2013-05-31 04:07:00
2013-11-01 15:34:00

我正在寻找查询以获取在源中显示的时间戳,以毫秒为单位。 我已经将我的查询放在一起,但它默认毫秒为 000。

从表 A 中选择 from_unixtime(unix_timestamp(u_date),'yyyy-MM-dd HH:mm:ss.SSS')

生成的结果集如下:

2007-10-26 10:07:00.000
2005-05-04 11:12:54.000(毫秒 .297 默认为 000)
2013-05-31 04:07:00.000
2013-11-01 15:34:00.000

请分享您的意见

【问题讨论】:

    标签: timestamp impala


    【解决方案1】:

    要获得最多 3 位毫秒的格式化时间戳,您可以使用 from_timestamp 函数

    SELECT from_timestamp(u_date, 'yyyy-MM-dd HH:mm:ss.SSS') FROM table;
    

    unix_timestamp 函数以某种方式丢弃了毫秒信息,而from_unixtime 函数似乎也不能很好地解释毫秒级的 unix 时间戳

    (在Impala v2.9.0 测试)

    【讨论】:

      【解决方案2】:

      如果您的数据库中存储了一个毫秒级的 Unix 时间戳

      类似这样的东西 1525245791828

      并且您想从该字段中删除毫秒,以便您可以进行 Unix 时间戳比较。

      你可以这样做:

      cast((you_unix_timestamp_with_milliseconds_column/1000) as BIGINT)
      

      【讨论】:

        【解决方案3】:

        我使用带有 from_unixtime(0) 的 milliseconds_add 或 microseconds_add, 例如

        select milliseconds_add(from_unixtime(0), your_unix_timestamp_with_milliseconds_column) ;
        select microseconds_add(from_unixtime(0), your_unix_timestamp_with_microseconds_column) ;
        

        【讨论】:

          最近更新 更多