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

Har*_*ari 4 hive date type-conversion unix-timestamp isodate

我有如下 JSON 数据:我需要将该日期转换mongo_date为 utc 时间戳,以根据时间线示例每年、每月、每周使用 map reduce 分析 hive 中的数据

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

lef*_*oin 10

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"); 
Run Code Online (Sandbox Code Playgroud)

结果:

2017-01-01 05:01:10
Run Code Online (Sandbox Code Playgroud)

更新。此方法是删除Z并替换T为空间 usingregexp_replace并在必要时转换为时间戳,不使用unix_timestamp(),这将保留毫秒:

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

结果:

2019-05-17 17:03:09.775
Run Code Online (Sandbox Code Playgroud)