我们有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)
b / c中使用HQL
我们需要返回所有字段(使用asterix)。甚至可以做这样的事情吗?
答案 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