我有这样一根弦: "2014-09-02T03:01:09.8093664Z"
,我试图把它转换成本地时区。我试过了 from_utc_timestamp(eventTime, 'GMT')
, from_utc_timestamp(eventTime, "PDT")
,但hive只返回错误:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"2014-09-02T03:01:09.8093664Z",
.
.
.
... 7 more
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating Converting field _col0 from UTC to timezone: 'PDT'
我做错什么了吗?
我搜索了stackoverflow,但没有找到解决此问题的方法(本地时间转换为配置单元中的utc时间是相关的,但没有解决问题)
3条答案
按热度按时间ijxebb2r1#
解决这个问题的一个有用方法是创建一个udf函数来执行这个操作。这个新的可以是针对这种情况的,也可以是更通用的,以适应更多的日期时间格式转换。您可以阅读以下一些好处:
使您的配置单元查询更具可读性
如果在其他查询中需要此操作,请避免重复代码
使系统更具可伸缩性,因为您可以随时更新此方法
将复杂的操作委托给java代码,这样就可以测试那些复杂的部分。
您能在这里阅读更多关于如何创建自定义自定义自定义项的信息吗。
如果您需要知道如何在java中实现这个方法,我在starckoverflow中找到了一篇文章,解释了如何实现这个方法,这里有一个条目。
isr3a4wc2#
必须先以正确格式提取时间和日期字符串,然后才能将其转换为gmt。这需要以下格式“yyyy-mm-dd hh:mm:ss”。
使用regexp\u replace提取字符串,然后通过管道将其传递到from\u utc\u timestamp函数,如下所示:
您的输出是:
2014-09-01 03:01:09
祝你好运!qf9go6mv3#
来自unixtime(unix时间戳(“2014-09-02t03:01:09z”,“yyyy-mm-dd't'hh:mm:ss'z'”),“yyy-mm-dd hh:mm:ss”)
改为2014-09-02 03:01:09