HQL返回ISO时间戳

时间:2018-02-23 19:35:11

标签: json hadoop hive timestamp hiveql

我们有Hive表,如下所示:

CREATE TABLE IF not EXISTS xxxx
(
    `Timestamp` Timestamp
)
ROW format serde 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ('timestamp.formats'="yyyy-MM-dd'T'HH:mm:ss.SS'Z',yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'")

和json数据如下:

{.....,"TimeStamp":"2016-01-26T13:50:00.422Z",....}

感谢SERDEPROPERTIEStimestamp.formats hive能够将此json数据处理为Timestamp格式。这很好,因为我们可以使用字符串时间戳,因为它是Timestamp所以我们可以使用Timestamp的UDF。

但我们也希望将此数据反序列化为ISO时间格式 - 返回原始格式 - "2016-01-26T13:50:00.422Z"。据说我们需要这样做:

SELECT * FROM xxx

以ISO格式获得时间:

2016-01-26T13:50:00.422Z

我们希望避免在someUDF(Timestamp) b / c中使用HQL我们需要返回所有字段(使用asterix)。甚至可以做这样的事情吗?

1 个答案:

答案 0 :(得分:0)

这会将纪元转换回iso格式,但在小数秒内会丢失一些准确度。希望能帮助到你。感谢。

Query:  select concat(regexp_replace(cast(from_unixtime(cast(946713612 as bigint), 
'yyyy-MM-dd HH:mm:ss.SSS') as string),' ','T'),'Z');

Result: 2000-01-01T03:00:12.000Z