| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 聊一聊hive sql 执行计划 -> 正文阅读 |
|
[大数据]聊一聊hive sql 执行计划 |
Hive提供的执行计划目前可以查看的信息有以下几种: ● 查看执行计划的基本信息,即explain; ● 查看执行计划的扩展信息,即explain extended; ● 查看SQL数据输入依赖的信息,即explain dependency; ● 查看SQL操作相关权限的信息,即explain authorization; ● 查看SQL的向量化描述信息,即explain vectorization。 MR引擎下,用explain打开的执行计划包含以下两部分: ● 作业的依赖关系图,即STAGE DEPENDENCIES; ● 每个作业的详细信息,即STAGE PLANS。 举个栗子: 执行结果如下: 解读:
即stage0依赖stage-1的执行结果。stage-0表示客户端读取stage-1的执行结果 stage-1表示如下SQL,即select *from student_tb_orc where s_age<30 and s_name like'%红%’的执行过程。 Stage-1分为Map和Reduce两个阶段,对应的执行计划关键词解读如下: ● MapReduce:表示当前任务执行所用的计算引擎是MapReduce。 ● Map Opertaor Tree:表示当前描述的Map阶段执行的操作信息。 ● Reduce Opertaor Tree:表示当前秒时的是Reduce阶段的操作信息。 Map操作树(Map Operator Tree)信息解读如下: ● TableScan:表示对关键字alias声明的结果集,这里指代student_tb_orc,进行表扫描操作。 ● Statistics:表示对当前阶段的统计信息。例如,当前处理的数据行和数据量,这两个都是预估值。 ● Filter Operator:表示在之前操作(TableScan)的结果集上进行数据的过滤。 ● predicate:表示filter Operator进行过滤时,所用的谓词,即s_age<30and s_name like '%红%'。 ● Select Operator:表示在之前的结果集上对列进行投影,即筛选列。 ● expressions:表示需要投影的列,即筛选的列。 ● outputColNames:表示输出的列名。 ● Group By Operator:表示在之前的结果集上分组聚合。 ● aggreations:表示分组聚合使用的算法,这里是count(1)。 ● keys:表示分组的列,在该例子表示的是s_age。 ● Reduce output Operator:表示当前描述的是对之前结果聚会后的输出信息,这里表示Map端聚合后的输出信息。 ● key expressions/value expressions:MapReduce计算引擎,在Map阶段和Reduce阶段输出的都是键-值对的形式,这里key expression和valueexpressions分别描述的就是Map阶段输出的键(key)和值(value)所用的数据列。这里的例子key expressions指代的就是s_age列,value exporess指代的就是count(1)列。 ● sort order:表示输出是否进行排序,+表示正序,-表示倒序。 ● Map-reduce partition columns:表示Map 阶段输出到Reduce 阶段的分区列,在Hive-SQL中,可以用distribute by指代分区的列。 Reduce阶段所涉及的关键词与Map阶段的关键词是一样的,字段表示含义也相同 Reduce中出现但是在Map阶段没有出现的关键词。 ● compressed:在File Output Operator中这个关键词表示文件输出的结果是否进行压缩,false表示不进行输出压缩。 ● table:表示当前操作表的信息。 ● input format/out putformat:分别表示文件输入和输出的文件类型。 ● serde:表示读取表数据的序列化和反序列化的方式。 explain dependency 用于描述一段SQL需要的数据来源,输出是一个json格式的数据,里面包含以下两个部分的内容。 ● input_partitions:描述一段SQL依赖的数据来源表分区,里面存储的是分区名的列表,格式如下: 如果整段SQL包含的所有表都是非分区表,则显示为空。 ● input_tables:描述一段SQL依赖的数据来源表,里面存储的是Hive表名的列表,格式如下: 举个栗子 使用explain denpendency查看SQL查询分区表。 结果如下: explain dependency的使用场景有两个。 场景一,快速排除。快速排除因为读取不到相应分区的数据而导致任务数据输出异常。例如,在一个以天分区的任务中,上游任务因为生产过程不可控因素出现异常或者空跑,导致下游任务引发异常。通过这种方式,可以快速查看SQL读取的分区是否出现异常。 场景二,帮助理清表的输入,帮助理解程序的运行,特别是有助于理解有多重自查询,多表连接的依赖输入。 explain authorization 获取SQL访问的数据来源(INPUTS)和数据输出(OUTPUTS),以及当前Hive的访问用户(CURRENT_USER)和操作(OPERATION) 结果如下 AUTHORIZATION_FAILURES信息,提示对当前的输入没有查询权限,但如果运行上面的SQL的话也能够正常运行。为什么会出现这种情况?Hive在默认不配置权限管理的情况下不进行权限验证,所有的用户在Hive里面都是超级管理员,即使不对特定的用户进行赋权,也能够正常查询 explain vectorization 该命令是在Hive 2.3版本之后新增的功能,可用于查看Map阶段或者Reduce阶段在运行过程中是否使用向量化模式。那什么是向量化模式? 向量化模式是Hive 的一个特性,在没有引入向量化的执行模式之前,一般的查询操作一次只处理一行,在向量化查询执行时通过一次处理1024行的块来简化系统底层操作,提高了数据的处理性能。向量化模式的开启方式如下: set hive.vectorized.execution.enabled=true; 向量模式支持的数据类型有: ● tinyint;● smallint;● int;● bigint;● boolean;● float;● double;● decimal;● date;● timestamp;● string。 如果使用其他数据类型,如array和map等,即使是开启了向量化模式查询,查询操作也将使用标准的方式逐行执行。 1.explain vectorization only命令,表示整个执行计划将只显示向量化模式相关的描述信息,其他非向量化模式的描述都将被隐藏 demo: 结果如下: ● Execution Mode:表示当前的执行模式,vectorized表示当前模式是向量化的模式。 ● Map Vectorization:表示接下来的缩进信息描述的是关于Map阶段向量化执行模式信息。 ● enabled:表示该关键词所描述阶段是否已经开启向量化模式,true表示开启,false表示关闭。 ● enabledConditionsMet:表示该关键词所描述阶段,开启向量化模式已经满足的条件。 ● enableConditionsNotMet:表示该关键词所描述阶段,开启向量化模式未满足的条件。 ● groupByVectorOutput:表示该关键词所描述的阶段,分组聚合操作是否开启向量化模式,true表示开启。 ● inputFileFormats:表示该关键词所描述的阶段,输入的文件格式。 ● allNative:是否都是本地操作,false表示不是。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/15 23:23:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |