1、保留小数位问题
select round(1/3, 2);
--直接查询是没问题的
--hive
+--------+
| _c0 |
+--------+
| 0.33 |
+--------+
--impala
+---------------+
| round(1/3, 2) |
+---------------+
| 0.33 |
+---------------+
--但在视图中round就会失效,可以用
select cast(1/3 as decimal(20,3));
2、Parquet文件中Timestamp类型的时区问题
问题描述:使用Parquet存储的Hive表,如果字段类型是Timestamp,用Impala查询的时候,Timestamp会提前8个小时
原因:查询资料后才知道是时区问题造成的:Hive存储Timestamp默认会以本地时区(即东八区)计算;而Impala没有存储时区,故会有8个小时的时差
解决:
(1)Hive正确读取Impala存储的Parquet时间
set hive.parquet.timestamp.skip.conversion=true;
Hive设置了该参数后,在读取Parquet文件的时候,同样会读取该Parquet文件的meta信息,如果是由Impala创建的Parquet文件的话,在读取的时候就不会进行时间格式的转换了。
这个参数默认值就是true
(2)Impala正确读取Hive存储的Parquet时间
在Impala的配置里面设置
use_local_tz_for_unix_timestamp_conversions=true
convert_legacy_hive_parquet_utc_timestamps=true