hive 实战性能调优

小白按过往写PL-SQL和T-SQL的经验,总结了3条经验:
通过改写SQL,实现对计算引擎执行过程的干预;
o使用grouping sets代替union
o分解count(distinct)的SQL优化(使用子查询)
–改写前的代码段
select * from(
select s_age, s_sex, count(1) num,
from student_tb_orc
group by s_age, s_sex
union all
select s_age, null s_sex, count(1) num
from student_tb_orc
group by s_age
) a
–改写后的代码段
select s_age, s_sex, count(1) num
from student_tb_orc
group by s_age, s_sex
grouping sets((s_age), (s_age, s_sex))
;

–该案例演绎的是用子查询代替count(distinct),避免因数据倾斜导致的性能问题
–改写前的代码段
–统计不同年龄段,考取的不同分数个数
select s_age, count(distinct s_score) num
from student_tb_orc
group by s_age
–改写后的代码段
select s_age, count(1) num
from(
select s_age, s_score, count(1) num
group by s_age, s_score
) a
通过SQL-hint语法,实现对计算引擎执行过程的干预;
– map join()
– streamtable()
通过数据库开放的一些配置开关,实现对计算引擎的干预。

  • 开启向量化查询开关
    set hive.vectorized.execution.enabled=true;
  • 开启并行执行
    set hive.exec.parallel=true;
    set hive.exec.parallel.thread.number=2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值