【发布时间】:2019-02-22 01:27:28
【问题描述】:
我正在使用 json 有效负载查询 Hive 中的表,并从这些有效负载中提取时间戳。问题是时间戳以不同的时区格式存在,我试图在我的时区中提取它们。
我目前正在使用以下内容:
选择
from_unixtime(unix_timestamp(get_json_object (table.payload, '$.timestamp'), "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"))
来自表
如果时间戳采用以下格式,则返回正确的值:2018-08-16T08:54:05.543Z --> 2018-08-16 18:54:05(更改格式并转换为我的时区)
但是,如果有效负载包含以下格式的时间戳,则上述查询返回“null”: 2018-09-13T01:35:08.460+0000 2018-09-13T11:35:09+10:00
如何调整我的查询以适用于所有类型的时间戳,所有时间戳都转换为正确的时区(+10 是我的时区!)并且都采用相同的格式?
提前致谢!
【问题讨论】:
-
您将需要一个非常复杂的 CASE WHEN 逻辑与正则表达式匹配/替换,以处理大多数格式(并且不要期望处理所有 - 您需要有关区域设置的信息以匹配 DEC/DEZ或 01/02 作为 1 月 2 日与 2 月 1 日)。如果您无法开发 Java UDF,请创建一个 TEMPORARY MACRO。