Hive将UTC字符串转换为datetime

时间:2014-09-23 23:47:36

标签: hadoop hive bigdata hiveql

我有一个像这样的字符串:"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是相关的,但没有解决问题)

3 个答案:

答案 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 函数来执行此操作。这个新案例可能针对此案例或更适用于更多日期时间格式转换的通用案例。您可以在下面阅读一些好处:

  • 使您的配置单元查询更具可读性
  • 如果您需要在其他查询中执行此操作,请避免重复代码
  • 使您的系统更具可扩展性,因为您可以随时更新此方法
  • 将复杂的操作委托给Java 代码,因此您将能够测试这些复杂的部分。

您能否详细了解如何创建自定义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

祝你好运!