Hive SQL 执行计划解析

Hive SQL 执行计划解析

一、 explain用法

1. SQL 查询

EXPLAIN SELECT 
    SUM(view_dsp) AS view_sum
FROM ads.table_a 
WHERE p_day = '2025-01-06';

2. 执行计划


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: ads_full_link_report_i_h
            Statistics: Num rows: 58083 Data size: 13900518 Basic stats: COMPLETE Column stats: NONE
            Select Operator
              expressions: view_dsp (type: bigint)
              outputColumnNames: view_dsp
              Statistics: Num rows: 58083 Data size: 13900518 Basic stats: COMPLETE Column stats: NONE
              Group By Operator
                aggregations: sum(view_dsp)
                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: 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.TextInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

3. 执行计划释义

1. STAGE DEPENDENCIES
  • Stage-1:根 Stage。
  • Stage-0:依赖于 Stage-1,Stage-1 执行完成后执行 Stage-0。
2. STAGE PLANS
  • Stage: Stage-1
    • Map Reduce:MR 执行计划分为两部分。
      • Map Operator Tree:MAP 端的执行计划树。
        • TableScan:表扫描操作,Map 端第一个操作是加载表。
          • alias:表名(table_a)。
          • Statistics:表统计信息,包含表中数据条数、数据大小等。
            • Num rows: 58083:数据行数。
            • Data size: 13900518:数据大小。
            • Basic stats: COMPLETE:基本统计信息完整。
            • Column stats: NONE:列统计信息未收集。
        • Select Operator:选取操作。
          • expressions:需要的字段名称及字段类型(view_dsp (type: bigint))。
          • outputColumnNames:输出的列名称(view_dsp)。
          • Statistics:表统计信息,与 TableScan 相同。
        • Group By Operator:分组聚合操作。
          • aggregations:Map 端聚合函数信息(sum(view_dsp))。
          • mode:聚合模式,值为 hash,表示随机聚合(Hash Partition)。
          • outputColumnNames:聚合之后输出列名(_col0)。
          • Statistics:表统计信息,包含分组聚合之后的数据条数、数据大小等。
            • Num rows: 1:聚合后的数据行数。
            • Data size: 8:聚合后的数据大小。
            • Basic stats: COMPLETE:基本统计信息完整。
            • Column stats: NONE:列统计信息未收集。
          • Reduce Output Operator:Reduce 输出操作。
            • sort order:值为空,表示不排序。
            • Statistics:表统计信息,与 Group By Operator 相同。
            • value expressions:聚合后的输出字段名称及字段类型(_col0 (type: bigint))。
      • Reduce Operator Tree:Reduce 端的执行计划树。
        • Group By Operator:分组聚合操作。
          • aggregations:Reduce 端聚合函数信息(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:表统计信息,与 Group By Operator 相同。
            • table:输出表的格式信息。
              • input format:输入文件格式化方式(org.apache.hadoop.mapred.TextInputFormat)。
              • output format:输出文件格式化方式(org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat)。
              • serde:序列化方式(org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe)。
  • Stage: Stage-0
    • Fetch Operator:数据提取操作。
      • limit:值为 -1,表示不限制条数。
      • Processor Tree:处理器树。
        • ListSink:数据输出到客户端。

二、explain dependency用法

1. SQL 查询

EXPLAIN DEPENDENCY 
SELECT COUNT(*) 
FROM ads.table_a 
WHERE p_day = '2025-01-06';
  • 作用:查询表 ads.table_ap_day = '2025-01-06' 的数据行数。
  • EXPLAIN DEPENDENCY:用于查看查询的依赖信息,包括输入表的分区和表信息。

2. 输出解析

输出是一个 JSON 格式的结果,包含两部分:

  • input_partitions:查询依赖的分区信息。
  • input_tables:查询依赖的表信息。
input_partitions
	"input_partitions": [
	    {"partitionName": "ads@table_a@p_day=2025-01-06/p_hour=00"},
	    {"partitionName": "ads@table_a@p_day=2025-01-06/p_hour=01"},
	    ...
	    {"partitionName": "ads@table_a@p_day=2025-01-06/p_hour=23"}
	]
  • 含义:查询依赖的分区列表。
  • 分区格式ads@table_a@p_day=2025-01-06/p_hour=XX
    • ads:数据库名。
    • table_a:表名。
    • p_day=2025-01-06:分区键及其值(按天分区)。
    • p_hour=XX:子分区键及其值(按小时分区,XX 为 00 到 23)。
  • 说明
    • 查询涉及 p_day = '2025-01-06' 这一天的所有小时分区(共 24 个分区)。
    • 每个分区对应一个小时的子分区(如 p_hour=00p_hour=23)。
input_tables
	"input_tables": [
	    {
	        "tabletype": "MANAGED_TABLE",
	        "tablename": "ads@table_a"
	    }
	]
  • 含义:查询依赖的表信息。
  • 字段解析
    • tabletype:表类型,MANAGED_TABLE 表示这是一个 Hive 管理的内部表。
    • tablename:表名,格式为 数据库名@表名ads@table_a)。

通过分析 EXPLAIN DEPENDENCY 的输出,可以更好地理解查询的输入数据来源,从而优化查询性能和资源使用。

三、explain authorization用法

1. SQL 查询

EXPLAIN AUTHORIZATION 
SELECT COUNT(*) 
FROM ads.table_a 
WHERE p_day = '2025-01-06';
  • 作用:查询表 ads.table_ap_day = '2025-01-06' 的数据行数。
  • EXPLAIN AUTHORIZATION:用于查看查询的权限信息,包括输入表、分区、输出路径以及当前用户和操作类型。

2. 输出解析

输出分为以下几个部分:

INPUTS
ads@table_a
ads@table_a@p_day=2025-01-06/p_hour=00
ads@table_a@p_day=2025-01-06/p_hour=01
...
ads@table_a@p_day=2025-01-06/p_hour=23
  • 含义:查询依赖的输入表和分区。
  • 格式
    • ads@table_a:数据库名和表名。
    • ads@table_a@p_day=2025-01-06/p_hour=XX:分区信息,p_day 是按天分区,p_hour 是按小时分区。
  • 说明
    • 查询涉及 ads.table_a 表。
    • 查询涉及 p_day = '2025-01-06' 这一天的 24 个小时分区(p_hour=00p_hour=23)。
OUTPUTS
hdfs://apple/tmp/hive/ads/37fa21fb-bafb-49b8-a703-f48f1edcade9/hive_2025-01-20_18-50-55_722_2728294902974034323-1/-mr-10000
  • 含义:查询结果的输出路径。
  • 格式:HDFS 路径,表示查询的临时输出文件。
  • 说明
    • 查询结果会被写入这个临时路径。
    • 路径中包含时间戳和唯一标识符,用于区分不同的查询任务。
CURRENT_USER
ads
  • 含义:当前执行查询的用户。
  • 说明
    • 当前用户是 ads,表示查询是以 ads 用户的权限执行的。
OPERATION
QUERY
  • 含义:当前操作的类型。
  • 说明
    • 操作类型是 QUERY,表示这是一个查询操作。

通过分析 EXPLAIN AUTHORIZATION 的输出,可以更好地理解查询的权限需求和执行逻辑,从而优化查询性能和权限管理。

上一篇:联德胜w801开发板(四)实现腾讯云mqtt的订阅和发布


下一篇:案例分析一