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
如何使用 JS 将 GMT 日期时间转换为 GMT Unix TimeStamp?