hql返回iso时间戳

a0zr77ik  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(247)

我们的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",....}

多亏了 SERDEPROPERTIES 以及 timestamp.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)HQL b/c我们需要返回所有字段(使用asterix)。有可能做这样的事吗?

z3yyvxxp

z3yyvxxp1#

这会将epoch转换回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

相关问题