hive SQL优化总结

1.行过滤

尽早尽量过滤数据,减少每个阶段的数据量。

例如两个表join,把where筛选条件写到单表子查询里再进行join可减少每个表的读取数据量。

2.列裁剪

例如某表有a,b,c,d,e五个字段,但是我们只需要a和b,那么请用select a,b from table 而不是select * from table。

3.分区裁剪

在查询的过程中减少不必要的分区,即尽量指定分区,这一块hive分区表严格模式有强制措施。

4.减少job数

巧妙的使用 UNION ALL 减少 job 数量

对于多表union all场景,我们可以把多个表的数据先读取进来,然后打上标记再去做聚合统计。

利用多表相同的JOIN 条件,去减少 job 的数量

不论是外关联outer join还是内关联inner join,如果join的key相同,不管有多少表,都会合并为一个MapReduce任务。

5.减少任务map数量

主要困扰我们的是小文件问题,首先我们hive配置中添加了set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat参数,

其次从根本上还是要通过采集端文件拆分优化或者小文件合并服务等方面减少小文件的形成。

6.善用multi-insert、善用union all

#查询了两次a

insert overwrite table tmp1 select ... from a where 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值