博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive Explain(翻译自Hive wiki)
阅读量:7096 次
发布时间:2019-06-28

本文共 4221 字,大约阅读时间需要 14 分钟。

EXPLAIN语法

Hive提供EXPLAIN命令,显示查询的执行计划。语法如下:

EXPLAIN [EXTENDED] query

EXPLAIN语句使用EXTENDED,提供执行计划关于操作的额外的信息。这是典型的物理信息,如文件名。

Hive查询被转换成序列(这是一个有向无环图)阶段。这些阶段可能是mapper/reducer阶段,或者做metastore或文件系统的操作,如移动和重命名的阶段。 EXPLAIN的输出包括三个部分:

查询的抽象语法树

执行计划计划的不同阶段之间的依赖关系

每个场景的描述

场景的描述,显示了与元数据相关操作的操作序列。元数据会包括FilterOperator的过滤器表达式,或SelectOperator的查询表达式,或FileSinkOperator的文件输出名字。

 

例子

考虑下面的EXPLAIN查询:

EXPLAINFROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;

语句的输出包含下面的部分

抽象语法树

ABSTRACT SYNTAX TREE:  (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))

 

依赖图

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

这显示,Stage-1是根阶段,Stage-2在Stage-1完成后执行,Stage-0在Stage-2完成后执行。

 

每个阶段的计划

STAGE PLANS:  Stage: Stage-1    Map Reduce      Alias -> Map Operator Tree:        src            Reduce Output Operator              key expressions:                    expr: key                    type: string              sort order: +              Map-reduce partition columns:                    expr: rand()                    type: double              tag: -1              value expressions:                    expr: substr(value, 4)                    type: string      Reduce Operator Tree:        Group By Operator          aggregations:                expr: sum(UDFToDouble(VALUE.0))          keys:                expr: KEY.0                type: string          mode: partial1          File Output Operator            compressed: false            table:                input format: org.apache.hadoop.mapred.SequenceFileInputFormat                output format: org.apache.hadoop.mapred.SequenceFileOutputFormat                name: binary_table  Stage: Stage-2    Map Reduce      Alias -> Map Operator Tree:        /tmp/hive-zshao/67494501/106593589.10001          Reduce Output Operator            key expressions:                  expr: 0                  type: string            sort order: +            Map-reduce partition columns:                  expr: 0                  type: string            tag: -1            value expressions:                  expr: 1                  type: double      Reduce Operator Tree:        Group By Operator          aggregations:                expr: sum(VALUE.0)          keys:                expr: KEY.0                type: string          mode: final          Select Operator            expressions:                  expr: 0                  type: string                  expr: 1                  type: double            Select Operator              expressions:                    expr: UDFToInteger(0)                    type: int                    expr: 1                    type: double              File Output Operator                compressed: false                table:                    input format: org.apache.hadoop.mapred.TextInputFormat                    output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat                    serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe                    name: dest_g1  Stage: Stage-0    Move Operator      tables:            replace: true            table:                input format: org.apache.hadoop.mapred.TextInputFormat                output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat                serde: org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe                name: dest_g1

这个例子,有2个map/reduce阶段(Stage-1和Stage-2),还有一个文件系统相关阶段(Stage-0).Stage-0简单把结果从临时目录,移动到表dest_g1相关的目录。

 

map/reduce阶段包含2部分:

map/reduce场景本身包含2个部分:表映射到Map运算符树的别名--这个映射,通知mapper运算符树调用,处理特定表的行或先前的map/reduce阶段的结果。在上面例子的Stage-1,原始表的行,被Reduce输出运算符的运算符树处理。类似,在Stage-2中,Stage-1的结果的行被Reduce输出运算符的其他运算符树处理。每个Reduce输出操作符,根据元数据的标准,把数据分区到reducers。

Reduce操作符树——这个操作符树处理map/reduce任务的reducer的所有行。在例子的Stage-1,Reducer操作符树开展局部聚合,而Stage-2的reduers操作符树对Stage-1的局部聚合,做最终的聚合的计算。

 翻译自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain

转载于:https://www.cnblogs.com/ggjucheng/archive/2013/01/16/2861665.html

你可能感兴趣的文章
虚幻4游戏开发_3_创建与继承材质
查看>>
win2003域控主备(热备)搭建
查看>>
浪潮之巅读后感
查看>>
Mathematica 函数调用发生异常时停止计算
查看>>
Linux service命令
查看>>
TCP发送源码学习(2)--tcp_write_xmit
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
C# 中英文符号互转
查看>>
ACM HDU 1219 AC me(简单题,但是花了很长时间才AC)
查看>>
Ethernet LEDs
查看>>
row_number()over函数的使用(转)
查看>>
怎样在Delphi中屏蔽Flash控件的右键弹出菜单
查看>>
[BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
查看>>
DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)
查看>>
Html.ActionLink 几种重载方式说明及例子
查看>>
使用mysql触发器脚本,解决流水数据的添加。
查看>>
SIP and RTP Stack
查看>>
Activity间用Intent、Bundle、onActivityResult进行传值
查看>>
在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
查看>>
AC自动机 - 多模式串的匹配运用 --- HDU 3065
查看>>