Apache Hive:如何将字符串转换为时间戳?

问题描述:

我试图将REC_TIME列中的字符串转换为蜂巢中的时间戳格式。Apache Hive:如何将字符串转换为时间戳?

例:太阳07月31日9点​​28分20秒UTC 2016 => 2016年7月31日9点​​28分20秒

SELECT xxx, UNIX_TIMESTAMP(REC_TIME, "E M dd HH:mm:ss z yyyy") FROM wlogs LIMIT 10; 

当我执行上述SQL它返回一个空值。

试试这个:

select from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016","EEE MMM dd HH:mm:ss zzz yyyy")); 

这工作得很好,如果你的蜂巢集群具有UTC时区。假设你的服务器在CST中,那么你需要按照如下方式去达到UTC;

select to_utc_timestamp(from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016","EEE MMM dd HH:mm:ss zzz yyyy")),'CST'); 

希望这会有所帮助。

编辑 配置单元日期函数使用JAVA简单日期formater的模式。有关这些模式,请参阅this

+0

谢谢Nidhin,这工作。如果我必须对时间戳做更多的操作,你能分享文档链接吗?这将有所帮助 – Naveen

+0

添加了参考URL。感谢您回答问题的答案是否能接受答案。 –

+0

如果我的服务器在EST并将其转换为GMT,该怎么办?怎么做? –

要知道我的电脑上运行PDT

[[email protected] ~]$ date +%Z 
PDT 

所以UTC时间转换为2点28分20秒PDT。无论如何,这不是重点。 您正在使用HH数小时,使用hh,并且您需要至少3个月的月份。

0: jdbc:hive2://quickstart:10000/default> select from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016", 'E MMM dd hh:mm:ss z yyyy')) as date; 
+----------------------+--+ 
|   date   | 
+----------------------+--+ 
| 2016-07-31 02:28:20 | 
+----------------------+--+