Hive Explain 详解

导读

前文 《一文读懂 SQL Server 执行计划》 中介绍过关系型数据库 SQL Server 的执行计划执行计划在数据开发过程中的重要性,以及如何阅读执行计划,根据执行计划分析 SQL 语句的执行效率问题并提出优化方案。Hive 是基于 Hadoop,实现了通过 SQL 操作 MapRedue 任务,简化了大数据编程的难度,使得普通用户也可以完成大数据程序开发。SQL 目前是使用最为广泛的结构化数据操作语言,未来大数据框架对 SQL 的支持也必将是一种趋势。Hive 在经过一系列编译过程后生成执行计划并提交 MapReduce 等执行引擎端,数据开发人员除了具备 SQL 的编程能力之外, 还必须具备 SQL 执行效率定位能力,而执行计划就是开发人员快速打开 SQL 优化大门的一把钥匙。

HQL 编译过程

本文重点不会介绍 HQL 编译过程的详细内容,对于大部分开发者来说该过程还是比较枯燥的,我们这里大概了解 Hive 会经过如下六个阶段后将 HQL 编译为物理执行计划后提交到计算引擎 MapReduce。

  1. 词法,语法解析
  2. 遍历 AST 抽象出 QB( Query Block)
  3. 将 QB 转化成执行操作树 OperatorTree
  4. 逻辑层优化器执行 OperatorTree 变换,生成逻辑执行计划,
  5. 遍历 OperatorTree,翻译为 MapReduce 任务,生成物理执行计划
  6. 物理层优化器进行 MapReduce 任务变化,最终执行计划生成

Explain 语法

Hive 提供的查看查询语句执行计划的语法如下:

EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZEquery

EXPLAIN :查看执行计划的基本信息;

EXPLAIN EXTENDED:加上 EXTENDED 可以输出有关计划的额外信息。这通常是物理信息,例如文件名,这些额外信息在特殊场景下可能会使用到;

EXPLAIN CBO:输出由Calcite优化器生成的计划。CBO 从 Hive 4.0.0 版本开始支持;

EXPLAIN AST:输出查询的抽象语法树。AST 在转储AST可能会导致OOM错误,因此从 EXTENDED中删除了,将在4.0.0版本中作为单独的命令使用,主要用于开发或者高级用户通过查看抽象语法树发现问题;

EXPLAIN DEPENDENCY:DEPENDENCY 在 EXPLAIN 语句中使用会产生有关计划中输入的额外信息。它显示了输入的各种属性;

EXPLAIN AUTHORIZATION:查看SQL操作相关权限的信息,从 Hive 0.14.0 开始支持;

EXPLAIN LOCKS:这对于了解系统将获得哪些锁以运行指定的查询很有用。LOCKS 从 Hive 3.2.0 开始支持;

EXPLAIN VECTORIZATION:查看SQL的向量化描述信息,显示为什么未对 Map 和 Reduce 进行矢量化。从 Hive 2.3.0 开始支持;

EXPLAIN ANALYZE:用实际的行数注释计划。从 Hive 2.2.0 开始支持;

Explain 输出

一个 HIVE 查询被转换为一个由一个或多个stage 组成的序列(有向无环图DAG)。这些 stage 可以是 Map/Reduce stage,也可以是负责元数据存储的 stage,也可以是负责文件系统的操作(比如移动和重命名)的 stage。

EXPLAIN 输出主要包括一下三部分,其中第一部分根据前文介绍在新版本中已经移除,只有其余两部分。

1), 抽象语法树 ( 该部分已经移除,使用单独的命令查看 )
2), Stage Dependencies: 各个 stage 之间的依赖性
3), Stage Plan: 各个 stage 的执行计划

按照上一部分的介绍,我们通过例子来看一下 EXPLAIN 的详细使用,查询 HQL 如下,该 SQL 是数据仓库中常见的数据仓库需求 —— 获取销售区域销售额并按照销售额按照降序排列。

SQL 脚本如下:

select ds.salesterritoryregion , sum(sales.salesamount) total_amt
from ods.dws_fact_internetsales  sales
left join ods.dim_salesterritory ds on sales.salesterritorykey = ds.salesterritoryke
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值