我有一个像这样的字符串:"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并没有找到解决这个问题的方法(Local Time Convert To UTC Time In Hive是相关的,但没有解决问题)
答案 0 :(得分:4)
from_unixtime(UNIX_TIMESTAMP(“2014-09-02T03:01:09Z”,“yyyy-MM-dd'T'HH:mm:ss'Z'”),“yyyy-MM-dd HH:mm:ss “)
汇聚到2014-09-02 03:01:09
答案 1 :(得分:0)
解决此问题的一种有用方法是创建 UDF 函数来执行此操作。这个新案例可能针对此案例或更适用于更多日期时间格式转换的通用案例。您可以在下面阅读一些好处:
您能否详细了解如何创建自定义UDF here 。
如果您需要了解如何在Java中实现此方法,我在Starckoverflow中找到了一条向您解释的方法,here您有条目。
答案 2 :(得分:0)
在将其转换为GMT之前,必须先以正确的格式提取时间和日期字符串。这需要以下格式'yyyy-MM-dd HH:mm:ss'。
使用regexp_replace提取字符串,然后将其传递给from_utc_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