如何将 yyyy-MM-dd-hh.mm.ss” 中的日期字段转换为 Hive 中的时间戳字段 (yyyy-MM-dd hh:mm:ss)

How to Convert date field in yyyy-MM-dd-hh.mm.ss” to Timestamp field(yyyy-MM-dd hh:mm:ss) in Hive)

我有一个格式为 yyyy-MM-dd-hh.mm.ss 的日期字段,来自 db2 source.I 想要加载到配置单元并转换为时间戳。

如何实现?

您的源数据库在小时、分钟和秒之间有 dot。 Hive 支持它们之间的 :,例如:yyyy-MM-dd HH:mm:ss.

参考:Hive Date Functions

select
cast(
  concat(
    substr('2015-07-22-09.00.32',1,10), ' ', 
    substr('2015-07-22-09.00.32',12,2), ':', 
    substr('2015-07-22-09.00.32',15,2), ':', 
    substr('2015-07-22-09.00.32',18,2)
  ) AS TIMESTAMP
)
;

您可以使用 unix_timestampfrom_unixtime 的组合来代替您当前使用的 substr 方法。

select cast( 
           from_unixtime(
                unix_timestamp('2017-08-31-12:24:48' , 'yyyy-MM-dd-HH:mm:ss') 
           )
        as timestamp
);

+------------------------+--+
|          _c0           |
+------------------------+--+
| 2017-08-31 12:24:48.0  |
+------------------------+--+