如何在Hive中将ISO日期转换为UTC日期

4

我有以下JSON数据:我需要将该日期或mongo_date转换为UTC时间戳,以便按时间轴在Hive中分析数据,例如按年、按月、按周使用MapReduce。

{
    "_id" : ObjectId("51ac77050e9edcdad271ce2d"),
    "company" : null,
    "date" : "19760224",
    "mongo_date" : ISODate("1976-02-24T00:00:00Z")

你好,你有找到任何解决办法来使用mongo_date与现有的UDFs(如Hour或Minutes)吗?因为Month、Week和Day可以与这些UDFs一起使用,但在'T'之后它会忽略hh:mm:ssZ。谢谢。 - Maziyar
1个回答

11

Hive理解这个格式:'yyyy-MM-dd HH:mm:ss.SSS'

使用unix_timestamp()将其转换为从1970-01-01开始经过的秒数,然后使用from_unixtime()将其转换为正确的格式:

 select from_unixtime(UNIX_TIMESTAMP("2017-01-01T05:01:10Z", "yyyy-MM-dd'T'HH:mm:ss'Z'"),"yyyy-MM-dd HH:mm:ss"); 

结果:

2017-01-01 05:01:10

更新。 此方法是使用regexp_replace删除Z并用空格替换T,如果需要转换为时间戳,则不使用unix_timestamp(),这将保留毫秒:

select timestamp(regexp_replace("2019-05-17T17:03:09.775Z", '^(.+?)T(.+?)Z$','$1 $2'));

结果:

2019-05-17 17:03:09.775

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接