【大数据之Hive】二十六、HQL之CBO优化、谓词下推、矢量化查询

1 CBO优化

  CBO是指Cost based Optimizer,即基于计算成本的优化。
  在Hive中,计算成本模型考虑到了:数据的行数、CPU、本地IO、HDFS IO、网络IO等方面。Hive会计算同一SQL语句的不同执行计划的计算成本,并选出成本最低的执行计划。
  目前CBO在hive的MR引擎下主要用于join的优化,例如多表join的join顺序。

相关参数:

--是否启用cbo优化 
set hive.cbo.enable=true;

案例
1、示例SQL语句

select
    *
from order_detail od
join product_info product on od.product_id=product.id
join province_info province on od.province_id=province.id;

2、关闭CBO优化

--关闭cbo优化 
sethive.cbo.enable=false;

--为了测试效果更加直观,关闭map join自动转换
sethive.auto.convert.join=false;

根据执行计划,三张表的join顺序如下:
在这里插入图片描述
3、开启CBO优化

--开启cbo优化 
sethive.cbo.enable=true;
--为了测试效果更加直观,关闭map join自动转换
sethive.auto.convert.join=false;

根据执行计划,三张表的join顺序如下:
在这里插入图片描述
4、总结
CBO优化对于执行计划中join顺序是有影响的。因为province info的数据量较小,所以将province_info的join顺序提前,会有更大的概率使得中间结果的数据量变小,从而使整个计算任务的数据量减小,也就是使计算成本变小。

2 谓词下推

  谓词下推指尽量将过滤操作前移,减少后续计算步骤的数据量。
  CBO优化也会完成一部分的谓词下推优化工作,因为在执行计划中,谓词越靠前,整个计划的计算成本就会越低。

相关参数:

--是否启动谓词下推(predicate pushdown)优化
set hive.optimize.ppd = true;

1、示例SQL语句

select
    *
from order_detail
join province_info
where order_detail.province_id='2';

2、关闭谓词下推优化

--是否启动谓词下推(predicate pushdown)优化
set hive.optimize.ppd = false;

--为了测试效果更加直观,关闭cbo优化
set hive.cbo.enable=false;

  执行计划中,过滤操作位于join操作后。
3、开启谓词下推优化

--是否启动谓词下推(predicate pushdown)优化
set hive.optimize.ppd = true;

--为了测试效果更加直观,关闭cbo优化
set hive.cbo.enable=false;

  执行计划中,过滤操作位于join操作之前。

3 矢量化查询

  Hive的矢量(也叫向量)化查询优化,依赖于CPU的矢量化计算。
  Hive的矢量化查询,可以极大的提高一些典型查询场景(例如scans, filters(过滤), aggregates(聚合), and joins)下的CPU使用效率。

CPU的矢量化计算的基本原理:
在这里插入图片描述
相关参数:

--开启矢量化计算
set hive.vectorized.execution.enabled=true;

  若执行计划中,出现“Execution mode: vectorized”字样,即表明使用了矢量化计算。
  array、struct等复杂数据类型和复杂操作不能作矢量化计算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值