hive将utc字符串转换为datetime

ljsrvy3e  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(379)

我有这样一根弦: "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时间是相关的,但没有解决问题)

ijxebb2r

ijxebb2r1#

解决这个问题的一个有用方法是创建一个udf函数来执行这个操作。这个新的可以是针对这种情况的,也可以是更通用的,以适应更多的日期时间格式转换。您可以阅读以下一些好处:
使您的配置单元查询更具可读性
如果在其他查询中需要此操作,请避免重复代码
使系统更具可伸缩性,因为您可以随时更新此方法
将复杂的操作委托给java代码,这样就可以测试那些复杂的部分。
您能在这里阅读更多关于如何创建自定义自定义自定义项的信息吗。
如果您需要知道如何在java中实现这个方法,我在starckoverflow中找到了一篇文章,解释了如何实现这个方法,这里有一个条目。

isr3a4wc

isr3a4wc2#

必须先以正确格式提取时间和日期字符串,然后才能将其转换为gmt。这需要以下格式“yyyy-mm-dd hh:mm:ss”。
使用regexp\u replace提取字符串,然后通过管道将其传递到from\u utc\u timestamp函数,如下所示:

select from_utc_timestamp(regexp_replace(event_time,'(\^\\d{4}-\\d{2}-\\d{2})T(\\\d{2}:\\d{2}:\\d{2}).*','$1 $2),'GMT') from my table;

您的输出是: 2014-09-01 03:01:09 祝你好运!

qf9go6mv

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

相关问题