当前位置: 首页 > news >正文

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 stageStage-0 depends on stages: Stage-1STAGE PLANS:Stage: Stage-1Map ReduceMap Operator Tree:TableScanalias: table_aStatistics: Num rows: 58083 Data size: 13900518 Basic stats: COMPLETE Column stats: NONESelect Operatorexpressions: view_dsp (type: bigint)outputColumnNames: view_dspStatistics: Num rows: 58083 Data size: 13900518 Basic stats: COMPLETE Column stats: NONEGroup By Operatoraggregations: sum(view_dsp)mode: hashoutputColumnNames: _col0Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONEReduce Output Operatorsort order:Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONEvalue expressions: _col0 (type: bigint)Reduce Operator Tree:Group By Operatoraggregations: sum(VALUE._col0)mode: mergepartialoutputColumnNames: _col0Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONEFile Output Operatorcompressed: falseStatistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONEtable:input format: org.apache.hadoop.mapred.TextInputFormatoutput format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormatserde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDeStage: Stage-0Fetch Operatorlimit: -1Processor 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. 输出

{"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=02"},....},{"partitionName": "ads@table_a@p_day=2025-01-06/p_hour=23"}],"input_tables": [{"tabletype": "MANAGED_TABLE","tablename": "ads@table_a"}]
}

3. 解析

输出是一个 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_aads@table_a@p_day=2025-01-06/p_hour=00ads@table_a@p_day=2025-01-06/p_hour=01...ads@table_a@p_day=2025-01-06/p_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
CURRENT_USER:ads
OPERATION:QUERY

3. 解析

输出分为以下几个部分:

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 的输出,可以更好地理解查询的权限需求和执行逻辑,从而优化查询性能和权限管理。

相关文章:

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 stageStage-0 depends on stages: Stage-1STAGE PLANS:Stage: Stage-1Map …...

热更新杂乱记

热更新主要有一个文件的MD5值的比对过程,期间遇到2个问题,解决起来花费了一点时间 1. png 和 plist 生成zip的时候再生成MD5值会发生变动。 这个问题解决起来有2种方案: (1).第一个方案是将 png和plist的文件时间改…...

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...

翻译:How do I reset my FPGA?

文章目录 背景翻译&#xff1a;How do I reset my FPGA?1、Understanding the flip-flop reset behavior2、Reset methodology3、Use appropriate resets to maximize utilization4、Many options5、About the author 背景 在写博客《复位信号的同步与释放&#xff08;同步复…...

Linux 进程环境变量:深入理解与实践指南

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 在 Linux 系统里…...

Linux探秘坊-------5.git

1.git介绍 1.版本控制器 为了能够更⽅便我们管理这些不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统&am…...

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…...

Java入门笔记(1)

引言 在计算机编程的广袤宇宙中&#xff0c;Java无疑是一颗格外耀眼的恒星。那么&#xff0c;Java究竟是什么呢&#xff1f; Java是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。曾经辉煌的Sun公司在2009年被Oracle&…...

设计模式的艺术-开闭原则

原则使用频率图&#xff08;仅供参考&#xff09; 1.如何理解开闭原则 简单来说&#xff0c;开闭原则指的是 “对扩展开放&#xff0c;对修改关闭”。 当软件系统需要增加新的功能时&#xff0c;应该通过扩展现有代码的方式来实现&#xff0c;而不是去修改已有的代码。 例如我…...

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …...

three.js+WebGL踩坑经验合集:写在前面的话

笔者从2023年初开始参与一个基于three.js引擎的web项目的开发工作。本打算2024年春节就把期间踩过的坑写到博客上分享给大家&#xff0c;然而哪怕本专栏的各种构思和内容已经在笔者的脑海里翻滚了一年&#xff0c;得了严重拖延症患者的我还是一直拖到了现在&#xff0c;实在惭愧…...

利用Linux的工作队列(Workqueue)实现中断下半部的处理

本文代码在哪个基础上修改而成&#xff1f; 本文是在博文 https://blog.csdn.net/wenhao_ir/article/details/145228617 的代码基础上修改而成。 关于工作队列(Workqueue)的概念 工作队列(Workqueue)可以用于实现Linux的中断下半部的&#xff0c;之前在博文 https://blog.cs…...

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台&#xff0c;广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法&#xff0c;尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…...

spring-springboot -springcloud

目录 spring: 动态代理: spring的生命周期(bean的生命周期): SpringMvc的生命周期: SpringBoot: 自动装配: 自动装配流程: Spring中常用的注解&#xff1a; Spring Boot中常用的注解&#xff1a; SpringCloud: 1. 注册中心: 2. gateway(网关): 3. Ribbon(负载均…...

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...

打造本地音乐库

文章目录 存储介质硬盘&#xff08;NAS&#xff09;媒体播放器&#xff08;可视MP3、MP4&#xff09;实体介质&#xff08;CD光盘、黑胶片&#xff09;注意事项为什么不使用在线音乐&#xff08;App&#xff09;和网盘打造一套HiFi系统的成本非常高 获取音乐正版音乐途径免费音…...

【2024 - 年终总结】叶子增长,期待花开

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论博客创作保持2024的记录清单博客科研开源工作生活 总结与展望互动致谢参考 前言…...

python 统计相同像素值个数

目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...

蓝卓“1+2+N”智慧工厂架构,让工业智能更简单

面对复杂的工业环境、海量的数据以及多样化的业务需求&#xff0c;如何实现智能化转型&#xff0c;让工业智能触手可及&#xff0c;成为了众多企业面临的难题。蓝卓以创新精神为引领&#xff0c;推出了“12N”智慧工厂架构&#xff0c;旨在简化工业智能的实现路径&#xff0c;让…...

12、MySQL锁相关知识

目录 1、全局锁和表锁使用场景 2、行锁的意义 3、为什么说间隙锁解决了快照的幻读? 4、RR隔离级别产生幻读的场景 5、详解元数据锁(MDL)作用以及如何减少元数据锁 6、出现死锁场景 7、查看MySQL锁情况 8、自增锁 1、全局锁和表锁使用场景 全局锁 备份数据库:当需要…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...