如何通过hive执行计划了解sql执行过程

通过 Hive 执行计划了解 SQL 执行过程

✅ 执行计划基本操作

1. 查看执行计划

-- 基本语法
EXPLAIN SELECT * FROM table WHERE condition;

-- 详细信息
EXPLAIN EXTENDED SELECT * FROM table WHERE condition;

-- 显示优化后的执行计划
EXPLAIN FORMATTED SELECT * FROM table WHERE condition;

2. 执行计划结构

EXPLAIN
SELECT category, SUM(amount)
FROM sales
WHERE dt = '2024-11-06'
GROUP BY category;

✅ 执行计划解读

1. Stage 划分

STAGE DEPENDENCIES:
  Stage-0 is a root stage
  Stage-1 depends on stages: Stage-0

STAGE PLANS:
  Stage-0:  -- 驱动阶段(如 DDL 操作)
    ...
  Stage-1: Map Reduce  -- 主要计算阶段
    ...

2. Map 阶段分析

Map Operator Tree:
    TableScan  -- 表扫描
      alias: sales
      Statistics: Num rows: 1000000 Data size: 20000000 Basic stats: COMPLETE Column stats: NONE
      Filter Operator  -- WHERE 过滤
        predicate: (dt = '2024-11-06')
        Statistics: Num rows: 100000 Data size: 2000000 Basic stats: COMPLETE Column stats: NONE
        Select Operator  -- 字段选择
          expressions: category, amount
          Statistics: Num rows: 100000 Data size: 2000000 Basic stats: COMPLETE Column stats: NONE
          Group By Operator  -- GROUP BY 操作
            keys: category
            values: amount
            Statistics: Num rows: 10000 Data size: 200000 Basic stats: COMPLETE Column stats: NONE

3. Reduce 阶段分析

Reduce Operator Tree:
  Group By Operator  -- Reduce 端聚合
    keys: category
    mode: mergepartial
    Statistics: Num rows: 1000 Data size: 20000 Basic stats: COMPLETE Column stats: NONE
    Select Operator  -- 最终选择
      expressions: category, _col1 (sum of amount)
      File Output Operator  -- 输出到文件
        table:
            input format: org.apache.hadoop.mapred.TextInputFormat
            output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

✅ 关键指标解读

1. 数据量统计

-- 关注 Statistics 信息
Statistics: Num rows: 1000000 Data size: 20000000
  • Num rows: 预估行数
  • Data size: 预估数据大小
  • Basic stats: 统计信息完整性

2. 操作符分析

操作符含义优化建议
TableScan表扫描检查分区裁剪
Filter OperatorWHERE 过滤过滤条件前移
Group By Operator分组聚合检查数据倾斜
Join OperatorJOIN 操作检查 JOIN 策略

✅ 实际案例分析

案例 1:JOIN 策略识别

EXPLAIN
SELECT a.*, b.name
FROM big_table a
JOIN small_table b ON a.id = b.id;

Map Join 识别

Map Join Operator  -- 表示使用了 Map Join
  condition map:
       Inner Join 0 to: [1]

普通 Join 识别

Reduce Output Operator  -- 需要 Shuffle
  key expressions: id
  Map Join Operator  -- 普通 Join 需要 Reduce 阶段

案例 2:数据倾斜检测

EXPLAIN EXTENDED
SELECT user_id, COUNT(*)
FROM user_log
GROUP BY user_id;

关注点

  • Group By Operator 的 keys 分布
  • Statistics 中的行数估算是否合理
  • 是否有 Combiner 优化

✅ 性能优化指导

1. 识别性能瓶颈

-- 关注以下指标
- TableScan 的数据量是否过大
- Filter Operator 的过滤比是否合理
- Group By Operator 的分组数是否过多
- Shuffle 数据量是否过大

2. 优化策略验证

-- 验证 Map Join
SET hive.auto.convert.join=true;
EXPLAIN SELECT ...;  -- 查看是否出现 Map Join Operator

-- 验证分区裁剪
EXPLAIN SELECT * FROM table WHERE dt = '2024-11-06';
-- 检查 TableScan 是否只扫描指定分区

3. 数据倾斜处理

-- 原始查询执行计划
EXPLAIN SELECT category, COUNT(*) FROM large_table GROUP BY category;

-- 倾斜处理后的执行计划
EXPLAIN 
SELECT category, SUM(cnt) FROM (
  SELECT category, COUNT(*) as cnt FROM large_table GROUP BY category
) t GROUP BY category;

✅ 高级执行计划分析

1. 多 Stage 优化

-- 复杂查询可能涉及多个 Stage
EXPLAIN
SELECT a.category, SUM(b.amount)
FROM (
  SELECT category, id FROM table_a WHERE status = 'active'
) a
JOIN (
  SELECT id, amount FROM table_b WHERE amount > 100
) b ON a.id = b.id
GROUP BY a.category;

Stage 分析

  • Stage-1: 处理子查询 a
  • Stage-2: 处理子查询 b
  • Stage-3: JOIN 和 GROUP BY

2. 向量化执行

SET hive.vectorized.execution.enabled=true;
EXPLAIN FORMATTED
SELECT * FROM table WHERE condition;

向量化标识

Vectorized execution: true

✅ 实用技巧

1. 快速问题定位

-- 检查是否走了 Map Join
grep -i "map join" explain_output

-- 检查数据量估算
grep "Num rows" explain_output

-- 检查分区裁剪
grep -i "partition" explain_output

2. 性能对比

-- 方案 A
EXPLAIN SELECT * FROM table WHERE condition_a;

-- 方案 B  
EXPLAIN SELECT * FROM table WHERE condition_b;

-- 比较:
-- - 数据扫描量
-- - Stage 数量
-- - 是否有 Map Join

3. 配置验证

-- 验证优化配置是否生效
SET hive.optimize.cp=true;      -- 列裁剪
SET hive.optimize.ppd=true;     -- 谓词下推
SET hive.auto.convert.join=true; -- Map Join

EXPLAIN SELECT ...;  -- 检查执行计划变化

📌 面试总结

通过 EXPLAIN 查看 Hive 执行计划:执行顺序为 TableScan → Filter → Select → Group By → Join → Reduce → Output。关键关注点:数据量统计(Num rows)、操作符类型(Map Join vs Shuffle Join)、Stage 划分、分区裁剪效果。优化方向:过滤条件前移、Map Join 触发、数据倾斜处理、向量化执行。

实践建议每次复杂查询前都查看执行计划,验证优化策略是否生效。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值