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

Hive sql 底层执行原理 目录 本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理。第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程,第三节剖析 SQL 编译成 MapReduce 的具体实现原理。 Hive Hive 底层执行架构 Hive SQL 编译成 MapReduce 过程 SQL编译成MapReduce具体原理 Hive Hive是什么?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 触发、数据倾斜处理、向量化执行。

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

深入理解大数据数仓工具 Apache Hive 底层原理 作者: 幻好 概述 ... 阅读详情

相关推荐

HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作

HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作

weixin_43542605的博客 4968

万字长文详解HiveSQL执行计划

Hive SQL的执行计划描述SQL实际执行的整体轮廓,通过执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑,掌握了执行逻辑也就能更好地把握程序出现的瓶颈点,从而能够实现更有针对性的优化。可以说执行计划是打开SQL优化大门的一把钥匙。 要想学SQL执行计划,就需要学习查看执行计划的命令:explain,在查询语句的SQL前面加上关键字explain是查看执行计划的基本方法。 学会explain,能够给我们工作中使用hive带来极大的便利! 查看SQL的执行计划 Hive提供的执行计划目前可以查

yuan_more的博客 926

hive explain 执行计划详解看懂执行过程

HIVE简介 讲explain之前,先了解大家常说的用hive查询取数和etl的过程,但是在讲hive查询取数过程,又得先了解大家又常说的hadoop集群到底是干什么的? 一句话概括:Hadoop就是存储海量数据和分析海量数据的工具。 Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。 HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进

liuya19921123的博客 4714

教你怎么查看 hive 的执行计划

编译器中的实现细节 我们在总结Hive架构的时候,我们知道Hive中有一个Compiler组件,这个组件主要是解析字符串的SQL,然后生成执行计划,我们介绍文章主要是详细讲解Compiler中的细节以及生成的执行计划 我们从下面的HiveSQL语句开始: use douban; -- 创建一张临时表 CREATE TABLE `douban.movie_temp`( ...

香蕉牛奶棒棒槌的博客 8290

大数据SQL调优专题——Hive执行原理

本文介绍了Hive,并通过源码梳理了Hive的执行原理。

从知识输入到知识输出 3929

Hive SQL转化为MapReduce的过程

编译 SQL 的任务是在上节中介绍的 COMPILER(编译器组件)中完成的。Hive将SQL转化为MapReduce任务,整个编译过程分为六个阶段: 词法、语法解析: Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象语法树 AST Tree Antlr是一种语言识别的工具,可以用来构造领域语言。使用Antlr构造特定的语言只需要编写一个语法文件,定义词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。 语义解析:

qianyulin 6114

hive--执行计划

来聊一聊执行计划,如果掌握了MapReduce,且开发者有一定的经验积累可以反推Compiler将SQL转换的MapReduce执行算法,并借助explain来比对你构思的执行计划和实际生成的执行计划是否存在差异,并思考差异的原因是啥,慢慢就能够对生成的算法以及算法执行路径图是否合理给出一个自己的评判,同时也能提升自己对SQL的掌控

qq_46893497的博客 3944

Hive SQL 执行计划

Hive SQL 执行计划

日常分享数据分析开发、编程语言内容 1437

Hive执行计划之一文读懂Hive执行计划

Hive的执行计划描述了一个hiveSQL语句的具体执行步骤,通过执行计划解读可以了解hiveSQL语句被解析器转换为相应程序语言的执行逻辑。通过执行逻辑可以知晓HiveSQL运行流程,进而对流程进行优化,实现更优的数据查询处理。同样,通过执行计划,还可以了解到哪些不一样的SQL逻辑其实是等价的,哪些看似一样的逻辑其实是执行代价完全不一样。如果说Hive优化是一堵技术路上的高墙,那么关于Hive执行计划,就是爬上这堵高墙的一架梯子。不同版本的Hive会采用不同的方式生成的执行计划。

鲁边的博客 1870

Hive SQL转化为MapReduce执行计划深度解析

目录 1. MapReduce实现基本SQL操作的原理 1.1 Join的实现原理 1.2 Group By的实现原理 1.3 Distinct的实现原理 2. SQL转化为MapReduce的过程 2.1 Phase1 SQL词法,语法解析 2.2 Phase2 SQL基本组成单元QueryBlock  2.3 Phase3 逻辑操作符Operator和逻辑操作树Operator...

i000zheng的博客 8396

看懂Hive的执行计划

官方文档 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain关于Hive执行计划简述一般执行计划有两个部分: stage dependencies 各个stage之间的依赖性 stage plan 各个stage的执行计划一个stage并不一定是一个MR,有可能是Fetch Operator,也有

与数据和AI有关的东西 5777

Hive SQL底层执行过程详细剖析

Hive SQL底层执行过程详细剖析 7年老码农,10W关注者。【Java与大数据架构】全面分享Java编程、Spark、Flink、Kafka、Elasticsearch、数据湖等干货。 8篇原创内容 公众号 本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理。第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程,第三节剖析 SQL 编译成 MapReduce 的具体实现原理。 Hive H.

大JAVA解决方案 2211

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 991

Hive SQL执行全过程源码解析(Hive3.1)

Hive任务提交源码解析

Deegue 8641

普通人也能看懂的Transformer源代码解释(PyTorch)

Transformer源代码解释之PyTorch篇 章节 词嵌入 位置编码 多头注意力 搭建Transformer 在这里插入图片描述 词嵌入 Transformer本质上是一种Encoder,以翻译任务为例,原始数据集是以两种语言组成一行的,在应用时,应是Encoder输入源语言序列,Decoder里面输入需要被转换的语言序列(训练时)。一个文本常有许多序列组成,常见操作为将序列进行一些预处理(如词切分等)变成列表,一个序列的列表的元素通常为词表中不可切分的最小词,整个文本就是一个大列表,元素为一个一

qq_50974223的博客 4167

AFSIM仿真系统组件开发入门:手把手教你扩展传感器与武器模型

本文为AFSIM仿真系统组件开发入门指南,手把手教你如何扩展传感器与武器模型。通过深入解析AFSIM基于组件的体系结构,并结合构建自定义电子扫描阵列雷达传感器和协同交战智能武器系统两个实战案例,详细介绍了从C++插件开发、MATLAB算法集成到脚本接口暴露的完整流程,帮助你掌握定制AFSIM仿真的核心能力。

t8u9v0w1x的博客 488

【Hive】HQL执行过程、编译MR过程解析

SQL执行过程解析Hive是什么?Hive 底层执行架构Hive五个组件基本流程Hive SQL 编译成 MapReduce 过程SQL编译成MapReduce具体原理Join的实现原理Group By的实现原理Distinct的实现原理 来源:大数据DT Hive是什么? Hive 是数据仓库工具,再具体点就是一个 SQL 解析引擎,因为它即不负责存储数据,也不负责计算数据,只负责解析 SQL,记录元数据。 Hive直接访问存储在 HDFS 中或者 HBase 中的文件,通过 MapReduce、Sp

一个写湿的程序猿 3390

Linux显卡管理避坑指南:为什么Xorg总是占用你的NVIDIA GPU?

本文深入解析了在Linux系统上,尤其是双显卡笔记本中,Xorg显示服务器进程占用NVIDIA GPU的根本原因。文章从Xorg的驱动加载机制和NVIDIA驱动的独占性入手,详细对比了禁用配置文件、手动配置xorg.conf、使用官方PRIME方案以及切换到Wayland等主流解决方案的优缺点与适用场景,旨在帮助用户有效释放GPU资源,确保深度学习、游戏等计算任务能独占显卡性能。

xgboost6farmer的博客 267

Hive查询计划解析:如何理解并优化SQL执行过程

Apache Hive作为大数据领域的重要工具,其**查询计划解析**功能是SQL性能优化的关键。通过深入理解Hive查询计划,你可以快速定位性能瓶颈,实现SQL执行效率的显著提升。🚀 ## 什么是Hive查询计划? Hive查询计划是SQL语句在执行前的详细执行蓝图,它展示了数据处理的完整流程。在Hive中,使用`EXPLAIN`命令可以查看查询计划,帮助你了解SQL语句在Hadoop集群

gitblog_00880的博客 1059

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 638

学Simulink——基于电能质量治理的场景实例:静止无功发生器(SVG)与并网逆变器的结合

本文详细介绍了基于Simulink的SVG与光伏并网逆变器联合仿真建模方法。系统包含光伏单元、SVG主电路、控制策略(无功检测+双闭环控制)等模块,通过ip-iq法实现动态无功补偿。仿真结果表明,SVG能快速响应负载变化,将功率因数提升至0.98以上,有效稳定母线电压。该方案为新能源并网系统提供了有功/无功协同控制解决方案,具有10ms级响应速度和±5kvar补偿能力。文章提供了完整的建模流程、控制算法实现和结果分析,可作为电力电子与电能质量治理领域的实践指导。

amy_mhd的博客 167

Hive执行计划

先看第一部分 stage dependencies ,包含两个 stage,Stage-1 是根stage,说明这是开始的stage,Stage-0 依赖 Stage-1,Stage-1执行完成后执行Stage-0。以上仅列举了4个我们生产中既熟悉又有点迷糊的例子,explain 还有很多其他的用途,如查看stage的依赖情况、hive 调优等,小伙伴们可以自行尝试。Statistics:表统计信息,包含分组聚合之后的数据条数,数据大小等。Statistics:表统计信息,包含表中数据条数,数据大小等。

zmx_messi的博客 1817

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

Hive执行计划初步了解

21

淡定一生2333的博客 1397

【QT/C++】事件过滤器之基于重写 eventFilter 方法的多种常见应用场景及实现

Qt事件过滤器通过重写eventFilter方法实现多种实用功能:1)鼠标事件处理(点击全选文本、禁用滚轮、悬停提示);2)键盘事件处理(输入内容限制、快捷键提交);3)焦点事件处理(自动弹出下拉框、实时验证);4)绘图事件处理(自定义控件绘制);5)窗口事件处理(防止意外关闭、尺寸限制)。事件过滤器提供非侵入式的事件处理方案,相比传统子类化方式更灵活,通过installEventFilter安装到目标控件即可实现各种交互增强功能。

yuhuasheng1997的博客 1483

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hive优化:Explain执行计划应该怎么看?

Hive优化:Explain执行计划 内容目录Hive优化:Explain执行计划一:Explain执行计划二:Explain的语法三:Explain的用法四、图示Explain执行计划 一:Explain执行计划 想要做好hive优化,你可以启用一些hive配置,压缩文件等等,但是羊毛出在羊身上,硬件配置好了,写了一个无敌菜sql,任凭你的配置再好,也不能顶得住sql的毁灭打击啊 所以就要了解一下sql的执行计划了,所谓sql执行计划,就是描绘出了这段sql的运行情况,有多少mr,有几个阶段,每个阶段干了

weixin_46429290的博客 5006

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: Hive 中 on和where的区别
下一篇: MapReduce过程中用到了哪些数据结构和算法
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

走过冬季

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

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

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

打赏作者

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

抵扣说明:

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

余额充值