【HIVE】(02)学会理解explain

系列文章回顾
【HIVE】(01)学会使用JOIN语句
【HIVE】(02)学会理解explain



一.何为Hive Explain

Hive提供Explain命令,返回sql语句的执行计划,语法如下:

explain [extended|dependency|authorization|cbo|ast|locks|vectorization|analyze] sql_query;
  • extended是可选参数,提供执行计划关于操作的额外信息,通常是物理信息,如文件名。
  • dependency是可选参数,会返回sql语句中所使用的表,会过滤掉临时表。
  • authorization是可选参数,hive0.14.0版本可支持,会返回输入输出相关信息以及当前执行的用户等信息。

执行完上面的 语句后,会 打印出抽象语法树。它表明 Hive是如何将 查询解析成 token(符号)和literal(字符)。
尽管 hiveql查询会将输出 写入到 控制台,但hive 实际上 会先将输出写入到1个临时文件中,即’tok_insert (tok_destination (tok_dir tok_tmp_file))’.

1.执行计划的作用

执行计划的作用是展示hive是如何将查询转化为mapreduce任务的。
Mapreduce实现SQL的原理

join的实现原理

join的实现方式有多种,最基本的方式是:在map的输出value中为不同表的数据打上tag标记,在reduce阶段根据tag判断数据来源。

以一个简单join为例,解读其底层执行机制:

  • sql语句
select 
	t2.name,
	t1.orderid
from 
	order t1
join 
	user t2 
on t1.uid=t2.uid;
  • 底层执行机制
    在这里插入图片描述

group by的实现原理
将group by 的字段组合为map的输出key值,利用mapreduce的排序,在reduce阶段保存lastkey区分不同的key。

以一个简单group by为例,解读其底层执行机制:

  • sql语句
select 
	rank,
	isonline,
	count(*) 
from 
	city 
group by rank, isonline;
  • 底层执行机制
    在这里插入图片描述

distinct的实现原理
当只有1个distinct字段时,如果不考虑map阶段的hash groupby,只需要将groupby字段和distinct字段组合为map输出key,利用mapreduce的排序,同时将groupby字段作为reduce的key,在reduce阶段保存lastkey即可完成去重。

以一个简单distinct为例,解读其底层执行机制:

  • sql语句
select 
	dealid,
	count(distinct uid) as num 
from 
	order 
group by dealid;
  • 底层执行机制
    在这里插入图片描述

2.执行计划的内容

执行计划的内容包含3个部分:

  • ABSTRACT SYNTAX TREE:sql语句的抽象语法树
  • STAGE DEPENDENCIES:各个阶段(stage)之间的依赖关系展示
  • STAGE PLANS:各个阶段(stage)的执行计划描述

以一个简单sql语句的执行计划为例,解读一下它的执行计划:

  • sql语句
explain extended
select 
	* 
from 
	tmp1;
  • 执行计划
    在这里插入图片描述

二.抽象语法树

经过词法和语法解析后,如果需要对表达式做进一步的处理,使用Antlr的抽象语法树,在语法分析的同时将输入语句转换成抽象语法树,后续在遍历语法树时完成进一步的处理。

三.HIVE任务的不同阶段

HIVE任务的拆解:

  • 1个hive任务会包含 1个或 多个 stage(阶段),不同的stage间会存在依赖关系。
  • 越复杂的查询 通常会引入越多的stage,而通常stage越多就需要越多的时间的来完成任务。
  • 1个stage可以是:1)1个mapreduce任务,2)1个抽样阶段;3)1个合并阶段;4)1个limit阶段。
  • hive在默认情况下,一次只执行1个stage(阶段),但是可以通过设置使其 并行执行

四.总结

以上就是今天要讲的内容,本文介绍了Explain,更多的使用可查看官方文档https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值