【问题标题】:Apache Hive- Time Stamp queryApache Hive-时间戳查询
【发布时间】:2020-01-03 05:28:54
【问题描述】:

我在 Hive DB 中有两个时间戳列,以以下格式存储时间戳:

hive> select last_date from xyz limit 2;  
OK
2019-08-21 15:11:23.553
2019-08-21 15:11:23.553

[上面默认存储毫秒]

hive> select last_modify_date from xyz limit 2;
OK
2018-04-18 23:32:58
2017-09-22 04:02:32

我需要一个通用的 Hive 选择查询,它将上述时间戳转换为“YYYY-MM-DD HH:mm:ss.SSS”格式,如果存在则保留毫秒值,如果不存在则附加“.000”存在。

到目前为止我所尝试的:

select 
    last_modify_date, 
    from_unixtime(unix_timestamp(last_modify_date), "yyyy-MM-dd HH:mm:ss.SSS") as ts 
from xyz limit 3;

但是,上述查询对上述两个时间戳列都显示“.000”。

请帮忙

【问题讨论】:

    标签: hive timestamp


    【解决方案1】:

    从实现unix_timestampUDF可以看出,返回值在SENCONDS中,用LongWritable表示。任何小于一秒的内容都会被四舍五入。

    您可以编写自己的 UDF,或者只使用纯 SQL 来实现。
    一种简单的方法是使用GenericUDFRpadrpad

        select rpad(your_date, 23, '.000') from your_table;  
    

    一些例子:

        hive> select rpad('2018-04-18 23:32:58', 23, '.000');
        OK
        2018-04-18 23:32:58.000
        hive> select rpad('2018-04-18 23:32:58.553', 23, '.000');
        OK
        2018-04-18 23:32:58.553
    

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2017-09-07
      • 2023-03-23
      相关资源
      最近更新 更多