Hive EXPLAIN 执行计划解析

Hive EXPLAIN 执行计划解析

EXPLAIN 语法

Hive提供了一个EXPLAIN命令,用于显示查询的执行计划。该语句的语法如下:

c 复制代码
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query 

在EXPLAIN语句中使用EXTENDED会提供关于计划中运算符的额外信息。这通常是物理信息,如文件名。

Hive查询会转换为一系列(更像是有向无环图)阶段。这些阶段可以是map/reduce阶段,也可以是执行元数据存储库或文件系统操作(如移动和重命名)的阶段。解释输出分为三个部分:

  • 查询的抽象语法树
  • 计划中不同阶段之间的依赖关系
  • 每个阶段的描述

阶段本身的描述显示了一系列运算符及与运算符相关的元数据。元数据可能包括FilterOperator的过滤表达式、SelectOperator的选择表达式或FileSinkOperator的输出文件名等内容。


EXPLAIN 示例:
c 复制代码
EXPLAIN
INSERT OVERWRITE TABLE dest_g1
SELECT src.key, sum(substr(src.value, 4))
FROM src
GROUP BY src.key;

这个SQL查询的作用是从表src中选择key字段,并对每个key对应的value字段进行截取后求和,然后将结果插入到目标表dest_g1中。输出结果包含以下两部分:依赖图每个阶段的计划

c 复制代码
//依赖图
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-2 depends on stages: Stage-1
  Stage-0 depends on stages: Stage-2
//这显示了Stage-1是根阶段,Stage-2在Stage-1完成后执行,Stage-0在Stage-2完成后执行。
c 复制代码
//每个阶段的计划
STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Alias -> Map Operator Tree:
        src
            Reduce Output Operator
              key expressions:
                    expr: key
                    type: string
              sort order: +
              Map-reduce partition columns:
                    expr: rand()
                    type: double
              tag: -1
              value expressions:
                    expr: substr(value, 4)
                    type: string
      Reduce Operator Tree:
        Group By Operator
          aggregations:
                expr: sum(UDFToDouble(VALUE.0))
          keys:
                expr: KEY.0
                type: string
          mode: partial1
          File Output Operator
            compressed: false
            table:
                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                output format: org.apache.hadoop.mapred.SequenceFileOutputFormat
                name: binary_table
 
  Stage: Stage-2
    Map Reduce
      Alias -> Map Operator Tree:
        /tmp/hive-zshao/67494501/106593589.10001
          Reduce Output Operator
            key expressions:
                  expr: 0
                  type: string
            sort order: +
            Map-reduce partition columns:
                  expr: 0
                  type: string
            tag: -1
            value expressions:
                  expr: 1
                  type: double
      Reduce Operator Tree:
        Group By Operator
          aggregations:
                expr: sum(VALUE.0)
          keys:
                expr: KEY.0
                type: string
          mode: final
          Select Operator
            expressions:
                  expr: 0
                  type: string
                  expr: 1
                  type: double
            Select Operator
              expressions:
                    expr: UDFToInteger(0)
                    type: int
                    expr: 1
                    type: double
              File Output Operator
                compressed: false
                table:
                    input format: org.apache.hadoop.mapred.TextInputFormat
                    output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
                    serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe
                    name: dest_g1
 
  Stage: Stage-0
    Move Operator
      tables:
            replace: true
            table:
                input format: org.apache.hadoop.mapred.TextInputFormat
                output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe
                name: dest_g1

在本示例中有2个map/reduce阶段(Stage-1和Stage-2)和1个与文件系统相关的阶段(Stage-0)。Stage-0基本上将结果从临时目录移动到与表dest_g1对应的目录。

排序顺序表示在排序中使用的键表达式的列数。每个"+"表示一个按升序排序的列,每个"-"表示一个按降序排序的列。

一个map/reduce阶段本身有两部分:
从表别名到Map Operator Tree的映射 - 这个映射告诉mapper应调用哪个操作树来处理特定表或先前map/reduce阶段结果的行。在上面的示例中,Stage-1中src表的行由Reduce Output Operator根的操作树处理。类似地,在Stage-2中,Stage-1结果的行由另一个Reduce Output Operator根的操作树处理。这些Reduce Output Operator根据元数据的标准将数据分区到reducer。
Reduce Operator Tree - 这是处理map/reduce作业的reducer上的所有行的操作树。例如,在Stage-1中,Reducer Operator Tree执行部分聚合,而Stage-2中的Reducer Operator Tree从Stage-1中拿到计算的部分聚合后计算最终聚合。

Hive执行计划官方文档https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain

相关推荐
阿里云大数据AI技术5 小时前
用 SQL 调大模型?Hologres + 百炼,让数据开发直接“对话”AI
sql·llm
字节跳动数据平台11 小时前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术12 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康14 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康1 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天2 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康4 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康5 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库5 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全