Impala 正在将时间转换为 GMT 如何避免这种情况

Posted

技术标签:

【中文标题】Impala 正在将时间转换为 GMT 如何避免这种情况【英文标题】:Impala is converting time into GMT how to avoid that 【发布时间】:2017-01-24 15:13:27 【问题描述】:

当我通过 impala 查询它时,我将 datefeild 转换为 hive 中的时间戳作为from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') as timestamp) as column_name,,时间以 GMT 格式显示。不仅我创建的每个时间戳字段的列都转换为 GMT 格式。

如何让它按原样显示时间?或者如何将其转换为 est ?

请帮助使用 sql 查询或 spark/scala 代码,我尝试使用此 How to convert a Date String from UTC to Specific TimeZone in HIVE? 它对我有帮助。

【问题讨论】:

【参考方案1】:

将时间转换为 UTC+00:00 的不是 Impala,而是 Hive,但仅在将时间戳保存到 Parquet 时。这是 Hive 中的一个错误:HIVE-12767。从 Parquet 文件中读取时间戳时,Hive 会进行反向调整以获得正确的值,但 Impala 不会。

根据 Impala 文档中的 TIMESTAMP Data Type 页面,-convert_legacy_hive_parquet_utc_timestamps=true 使 Impala 执行与 Hive 相同的反向调整,但使用它会产生性能开销。

如果您使用 Impala 写入时间戳并使用 Hive 将其读回,Hive 会注意到数据是由 Impala 写入的,因此不需要调整,因此 Impala 写入的时间戳会在 Hive 中正确显示。

【讨论】:

我在 hive 上下文中的 spark 代码中启用了它,它可以工作。谢谢 convert_legacy_hive_parquet_utc_timestamps 是一个 Impala 选项,您不能在 Spark 或 Hive 中启用它。 我明白你的意思 Zoltan,我正在使用配置单元上下文将数据加载到表中,最后我使 impala 中的元数据无效以反映更新,因为我们的用户在伊玛帕拉我无法启用你给我的参数。【参考方案2】:

你试过了吗?

SELECT  from_utc_timestamp(from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss'), 'GMT-4')  as column_name; 

它应该将您的日期转换为 EST 时区。另外,如果您要读取数据而不是使用时间系统,请考虑有关镶木地板日期格式的问题

Impala timestamps don't match Hive - a timezone issue?

问候!

【讨论】:

我试过这个我努力工作,我知道它可以读取但不能写入。谢谢

以上是关于Impala 正在将时间转换为 GMT 如何避免这种情况的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GMT(格林威治)时间将 XMLGregorianCalendar 转换为 java.util.Date

Spark:考虑夏令时将 GMT 时间戳转换为东部时间

如何使用 JS 将 GMT 日期时间转换为 GMT Unix TimeStamp?

如何使用 Python 将 GMT 时间转换为 EST 时间

如何将字符串转换为gmt时间

如何将日期/时间从 GMT 转换为本地时区