已复制
全屏展示
复制代码

Hive Explain 输出详细总结


· 4 min read

一. 示例解释

查询如下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

🔗

文章推荐