Hive与Impala查询同表返回timestamp值不一致的解决方法
Impala与Hive查询timestamp不一致问题修复方案
根因说明
Hive默认会按照集群配置的本地时区对存储的timestamp值做转换后返回,而Impala默认将底层存储的timestamp值识别为UTC时间,未做对应时区偏移转换,因此会出现固定时差的返回结果差异。
修复方案
- 会话级临时生效
每次执行Impala查询前运行如下命令,将当前会话时区调整为和Hive一致即可(示例为东八区时区,可根据集群实际时区替换对应值):SET TIME_ZONE = 'Asia/Shanghai'; - 集群级永久生效
修改Impala配置文件impala-site.xml,添加如下配置项后重启所有Impala服务即可:<property> <name>impala.timezone</name> <value>Asia/Shanghai</value> </property> - 特殊存储格式适配
如果目标表采用Parquet或者ORC格式存储,还需要额外开启时间戳转换配置保证解析逻辑和Hive对齐:
会话级生效命令:SET PARQUET_INT96_TIMESTAMP_CONVERSION = true;
集群级生效可将上述配置同步添加到impala-site.xml中。
内容的提问来源于stack exchange,提问作者DrGenius
相关产品推荐
相关产品推荐

