【问题标题】:Timestamp data value different between Hive tables and databricks delta tablesHive 表和数据块增量表之间的时间戳数据值不同
【发布时间】:2023-01-12 14:36:53
【问题描述】:
我们已经完成了从 Hive 到 ADLS 的数据二进制副本,并验证了校验和。虽然每个数据类型的值都匹配,但时间戳数据类型列显示 Hive 和 Delta(Azure Databricks) 表之间的值变化。
select abcdtstmp from xyz.abc where mn_ID = "sdsdsd-7878-0016"
2018-01-16 00:00:00.0 (on prem)
select abcdtstmp from xyz.abc where mn_ID = "sdsdsd-7878-0016"
2018-01-16T05:00:00.000+0000(DBX)
虽然校验和和所有验证确实匹配,但是在“T”之后添加的一些值引起了关注。任何建议都会有所帮助
【问题讨论】:
标签:
azure
hive
azure-databricks
cloudera
delta-table
【解决方案1】:
这似乎与timezone和蜂巢有关。
Hive 始终认为 Parquet 文件中的时间戳是以 UTC 存储的,它会在输出时将其转换为本地系统时间(集群主机时间)。因此,即使您将数据从 EST 传输到 EST,它的蜂巢也是罪魁祸首。
如果您的配置单元版本高于 1.2,您可以点击此链接 - https://issues.apache.org/jira/browse/HIVE-9482
设置hive.parquet.timestamp.skip.conversion=true
否则,您需要使用下面的 sql 手动将数据转换回 EST 或您想要的任何时区。
from_utc_timestamp(to_utc_timestamp(my_dt_tm,'America/New_York'),'America/Denver') AS local_time