explain
explain的作用
- 帮助了解hive底层原理
- 帮助hive调优
- 排查数据倾斜
如何使用
使用语法
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
如何阅读explain说明
eg:
select sum(if(organ_id>1000,1,0)) from dwd_dm_organ ;
执行计划如下:
--执行计划的第一部分:表示阶段数量、阶段的依赖关系
--阶段:一个stage表示一个job(mr),或者一次move、者fetch操作
--表示0阶段依赖于1阶段
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
--MR执行计划分为2个部分:
--Map Operator Tree MAP端的执行计划
--Reduce Operator Tree Reduce端的执行计划
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan--读取数据,常见的属性 alias
alias: dwd_dm_organ
Statistics: Num rows: 195025 Data size: 3705475 Basic stats: COMPLETE Column stats: NONE
Select Operator--查找操作
expressions: organ_id (type: bigint)
outputColumnNames: organ_id
Statistics: Num rows: 195025 Data size: 3705475 Basic stats: COMPLETE Column stats: NONE
Group By Operator --分组算子
aggregations:--聚合函数 sum(if((organ_id > 1000), 1, 0))
mode: hash --模式
outputColumnNames: _col0
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
Reduce Output Operator --输出给reduce
sort order: --map端排序规则
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
value expressions: _col0 (type: bigint)
Reduce Operator Tree:
Group By Operator --分组算子
aggregations: sum(VALUE._col0)
mode: mergepartial --模式为合并部分聚合结果
outputColumnNames: _col0
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
File Output Operator --文件输出
compressed: false
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
Stage: Stage-0
Fetch Operator--客户端获取数据
limit: -1
Processor Tree:
ListSink
常见的operator操作说明
-
TableScan 表扫描操作,一般出现在map读取数据阶段
- 会包含查询的表和表的相关统计信息
-
Select Operator:查询/选取操作
- 会包含查询的字段、输出的字段列名和表统计
-
Group By Operator:分组聚合操作
- aggregations:会显示聚合函数
- mode:聚合的模式
- Hash
- mergepartial 局部聚合
- final 最终聚合
- keys:分组字段
- outputColumnNames:输出列
- 其他表统计信息
-
Reduce Output Operator:输出到reduce
- sort order
- +:正序排序
- -:倒叙排序
- ±:第一列正序,第二列倒序
- 空:值为空表示不排序
- sort order
-
Fliter Operator:过滤操作
- predicate:断言/过滤条件 如sql中的where
-
Map Join Operator:Join操作
- condition map:join方式
- keys:join条件