Hive和Impala遇到的坑

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值