Hive Explain 输出详细总结
一. 示例解释
查询如下SQL
EXPLAIN SELECT sum(user_id) FROM orders;
下面是 explain 的详细内容
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: orders
Statistics: Num rows: 6645 Data size: 1794150 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: user_id (type: string)
outputColumnNames: user_id
Statistics: Num rows: 6645 Data size: 1794150 Basic stats: COMPLETE Column stats: NONE
Group By Operator
aggregations: sum(user_id)
mode: hash
outputColumnNames: _col0
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
Reduce Output Operator
sort order:
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
value expressions: _col0 (type: double)
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
一个 HIVE 查询被转换为由一个或多个 stage 组成的序列,即有向无环图 DAG。这些 stage 可以是 MapReduce stage,也可以是负责元数据存储的 stage,也可以是负责文件系统的操作(比如移动和重命名)的 stage。
从最外层开始,包含两个大的部分:stage dependencies(各个stage之间的依赖性)和 stage plan(各个stage的执行计划)
stage dependencies
说明各stage之间的依赖关系,root stage表示首先执行的stage
Map Operator Tree
- TableScan 扫描表
- alias 表名称
- Statistics 表统计信息,包含表中数据条数、数据大小等
- Select Operator 选取操作
- expressions 需要的字段名称及字段类型
- outputColumnNames 输出的列名称
- Statistics 表统计信息,包含表中数据条数、数据大小等
- Group By Operator 分组聚合操作
- aggregations 显示聚合函数信息
- mode 聚合模式,值有 hash:随机聚合,就是hash partition;partial:局部聚合;final:最终聚合
- keys 分组的字段,如果没有分组,则没有此字段
- outputColumnNames 聚合之后输出列名
- Statistics 表统计信息,包含分组聚合之后的数据条数,数据大小等
- Reduce Output Operator 输出到reduce操作
- sort order:值为空 不排序;值为 + 正序排序,值为 - 倒序排序;值为 +- 排序的列为两列,第一列为正序,第二列为倒序
Reduce Operator Tree
- Group By Operator
二. Operator解释
2.1 Select Operator
选取操作
- expressions:需要的字段名称及字段类型
- outputColumnNames:输出的列名称
- Statistics:表统计信息,包含表中数据条数,数据大小等
2.2 Group By Operator
分组聚合操作
- aggregations:显示聚合函数信息
- mode:聚合模式,值有 hash:随机聚合,就是hash partition;partial:局部聚合;final:最终聚合
- keys:分组的字段,如果没有分组,则没有此字段
- outputColumnNames:聚合之后输出列名
- Statistics: 表统计信息,包含分组聚合之后的数据条数,数据大小等
2.3 File Output Operator
文件输出操作
- compressed:是否压缩
- table:表的信息,包含输入输出文件格式化方式,序列化方式等
2.4 Reduce Output Operator
输出到reduce操作
- sort order:值为空 不排序;值为 + 正序排序,值为 - 倒序排序;值为 +- 排序的列为两列,第一列为正序,第二列为倒序
2.5 Fetch Operator
客户端获取数据操作
- limit: 值为 -1 表示不限制条数,其他值为限制的条数
2.6 Map Join Operator
join 操作
- condition map:join方式 ,如Inner Join 0 to 1 Left Outer Join0 to 2
- keys: join 的条件字段
- outputColumnNames: join 完成之后输出的字段
- Statistics: join 完成之后生成的数据条数,大小等
2.7 Filter Operator
过滤操作,常见的属性
- predicate:过滤条件,如sql语句中的where id>=1
三. 常见Explain参数
3.1 explain dependency
查看产生有关计划中输入的额外信息,它显示了输入的各种属性;
EXPLAIN dependency SELECT * from userprofile.parent_basics_dim;
{
"input_tables": [
{
"tablename": "userprofile@parent_basics_dim",
"tabletype": "EXTERNAL_TABLE"
}
],
"input_partitions": [
{
"partitionName": "userprofile@parent_basics_dim@dt=2021-09-04/partition_key=f_par_province"
}
]
}
3.2 explain authorization
查看SQL操作相关权限的信息
EXPLAIN authorization SELECT * from userprofile.parent_basics_dim
INPUTS:
userprofile@parent_basics_dim
userprofile@parent_basics_dim@dt=2021-09-04/partition_key=f_par_province
OUTPUTS:
hdfs://ns1/tmp/hive/work/7576275a-1141-4303-ad00-0ed121476cec/hive_2021-11-13_18-56-52_773_5345934718074432742-1/-mr-10001
CURRENT_USER:
work
OPERATION:
QUERY