Hive Apache配置单元-时间戳查询

Hive Apache配置单元-时间戳查询,hive,timestamp,Hive,Timestamp,我在配置单元数据库中有两个时间戳列,以以下格式存储时间戳: 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> 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
我需要一个通用的配置单元选择查询,该查询将上述两个时间戳转换为“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”

请帮助

从实现
unix\u时间戳
的中,您可以看到返回值以秒为单位,由
长可写
表示。任何小于1秒的都被四舍五入

您可以编写自己的UDF,也可以使用纯SQL来实现这一点。
一个简单的方法是使用
rpad

    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