HIVE SQL优化

作为数据仓库的利器,大部分的数仓工作者大部分时间都在写Hive Sql,根据作者经验整理出单纯的Hive Sql调优。

一. 普通场景下的sql优化

1. 列裁剪

由于数仓底层存储大都采用列式存储,如ORC/PARQUET,所以可以采用列裁剪的方式减少扫描的字段。

2. 分区裁剪

即查询数据表时增加分区的条件,数仓通常是集团级的数据存储,数据量非常大,所以大多都采用分区,加速数据统计效率,所以分区裁剪必不可少。

3. 利用hive的优化机制减少job

不论是outer join还是inner join,如果join的key相同,不管有多少表都会合为一个Mapreduce。

4. job输入输出优化

善用multi-insert、union all,不同表的union all相当于multi-insert,相同表的union all则是map一次输出多条。

insert overwrite table tmp select from a where condition1;
insert overwrite table tmp select from a where condition2;

from a
insert overwrite table tmp select where condition1
insert overwrite table tmp select where condition2;

5. 数据过滤

在join之前过滤掉不需要的数据

select t1.dim1,t1.measure1,t
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive SQL 优化是提高查询性能和执行效率的重要步骤。以下是一些常见的 Hive SQL 优化技巧: 1. 分区和分桶:通过在表中使用分区和分桶,可以减少查询的数据量,提高查询效率。 2. 数据压缩:使用压缩格式(如Snappy、Gzip)来减少存储空间,并提高数据读取速度。 3. 合理设置并行度:根据集群的规模和性能,合理设置并行度参数,如mapreduce.job.reduces、hive.exec.reducers.bytes.per.reducer等。 4. 使用索引:对于经常被查询的列,可以创建相应的索引来加速查询。 5. 避免全表扫描:尽量避免使用SELECT *,而是只选择需要的列,减少不必要的数据传输。 6. 数据倾斜处理:当某个列或分区的数据量远远大于其他列或分区时,可以考虑使用一些技术手段(如动态分区、map-side join)来解决数据倾斜的问题。 7. 使用合适的数据类型:选择合适的数据类型可以减少存储空间,提高查询性能。 8. 预热缓存:对于频繁执行的查询,可以通过预热缓存来避免每次都重新计算。 9. 动态分区:对于分区表,可以使用动态分区插入数据,减少数据倾斜和优化查询性能。 10. 优化查询语句:合理使用JOIN、GROUP BY、ORDER BY等操作,避免不必要的数据重复和排序操作。 请注意,具体的优化策略需要根据实际情况来定,可以通过观察查询执行计划、使用Hive性能调优工具等方法来进行优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值