如何解决 Hive 文本文件格式和镶木地板文件格式之间的日期差异

how to resolve date difference between Hive text file format and parquet file format

我们在 hive 中创建了一个外部 parquet table,使用 insert overwrite 将现有的文本文件数据插入外部 parquet table。 但我们确实观察到现有文本文件的日期与 parquet 文件不匹配。

从文件到文件的数据

txt 文件日期:2003-09-06 00:00:00 实木复合地板文件日期:2003-09-06 04:00:00

问题: 1)我们如何解决这个问题。 2) 为什么我们会得到这些数据差异。

甚至我们在从 sql 服务器上搜索表时也遇到了类似的问题,这是因为驱动程序或 jar 问题。

当您进行插入覆盖时,请尝试对日期字段使用强制转换。

这应该有用,如果您遇到任何问题,请告诉我。

感谢您的帮助..

在 Hue 中同时使用直线和 impala 查询编辑器。访问镶木地板 table 中的数据存储,当您通过 Hue 使用 impala 查询时出现时间戳问题。

这很可能与 Hive 和 Impala 处理时间戳值的已知差异有关:
- 当 Hive 将时间戳值存储为 Parquet 格式时,它会将本地时间转换为 UTC 时间,当它读取数据时,它会转换回本地时间。
- Impala,然而,另一方面,当它读取时间戳字段时不进行转换,因此返回 UTC 时间而不是本地时间。

如果您的服务器位于 EST 时区,这可以给出 +4h 时间偏移的解释,如下所示:
- 示例中的时间戳 2003-09-06 00:00 应理解为 EST EDT 时间(9 月 06 日是夏令时,因此 UTC-4h 时区)
- 当 Hive
存储时,+4h 被添加到时间戳中 - Hive读回时减去相同的偏移量,得到正确的值
- 当 Impala 回读时没有进行更正,因此显示 2003-09-06 04:00:00