概述
前一章本文介绍了Hive如何将HiveQL语言转换成抽象语法树(AST),本章将介绍Hive逻辑算子以及如何将AST转换成逻辑算子DAG图。
3.1 什么是逻辑算子
以如下HiveQL语句为例:
select* from a where id>100 limit 10
这条语句从表a中取id>100的前10条数据,Hive首先将该语句转换成AST如下图所示:
图3.1 语法树
接着,Hive将这棵AST树转换成逻辑算子DAG图如下:
图3.2是只有一条分支的简单DAG图,图中每个节点是一个算子(Operator)。每个算子代表了对数据某种的处理逻辑,算子包含三个主要的方法:
1)initialize:完成算子的初始化。
2)process:完成数据的处理,每次处理表中一条记录的数据。
3)forward:将处理完成的结果输出给子节点处理。
图3.2中,TS是TableScanOperator算子的简写,表示table扫描运算,该算子依次读取表中的每条记录,输出给子节点处理。FIL为FilterOperator的简写,表示过滤运算,对应HiveQL中的where语句。该算子会对输入的记录做过滤运算,将符合where表达式的记录输出给子节点,不符合的过滤掉。SEL是SelectOperator的简写,表示投影运算,对应select语句。该算子对输入的记录,计算select表达的值并输出给子节点,本例中会将输入记录的所有列全部输出。LIMI是LimitOperator算子的简写,表示limit运算,和limit语句对应。该算子控制输出记录的数量,如果数量超过limit值,停止输出。FS是FileOperator的缩写,表示数据输出算子。该算子将输入的记录输出到文件系统,对查询语句而言,记录会输出到临时文件中。
Hive中其他重要的算子还包括JoinOperator(JOIN),GroupByOperator(GBY),ReduceSinkOperator(RS),MapJoinOperator(MapJoin)等。
下面是一个复杂的HiveQL语句:
from student a join score b on a.id=b.id
insert overwrite table d1 selecta.id,count(b.score) group by a.id
insert overwrite table d2 select a.id,b.scoreorder by b.score limit 10
这条语句是多insert语句,包含两条insert语句,生成的算子DAG如下:
图3.3 多Insert语句算子DAG
JOIN算子左边两条分支分别读取表student和score的数据,并进行过滤,按照id分发数据 (ReduceSinkOperator完成),JOIN算子完成join运算,输出给右边两个insert语句的算子分支对数据进一步处理,最后通过FS算子输出到各自的目的数据源。
下表给出了Hive部分算子的功能介绍。
算子(简称) | 功能 | 说明 |
TableScanOperator(TS) | 表扫描 | HiveQL语句每张表对应一个TS算子。 |
SelectOperator(SEL) | 投影运算 | 对应select语句 |
FilterOperator(FIL) | 过滤运算 | 对应where语句 |
GroupByOperator(GBY) | Group by运算,包括hash group by和sort group by两种实现。 | 对应group by语句,Distinct也通过GBY实现 |
ReduceSinkOperator(RS) | 实现map端数据输出、排序和数据分发。 | 需要数据分发,排序的情况下会生成RS算子,如包含group by,sort by,join,distribute by,cluster by,order by语句的情况。 |
JoinOperator(JOIN) | Join运算 | 对应join语句 |
MapJoinOperator(MAPJOIN) | Map端join运算,将小表数据加载到内存和大表join. | 在mapjoin的情况下,join语句会生成MAPJOIN算子。 |
ScriptOperator(SCR) | 脚本运算 | Select中包含transform脚本的情况下生成该算子。 |
UDTFOperator(UDTF) | 输出UDTF函数计算结果 | 包含udtf函数的情况下,生成UDTF算子。 |
UnionOperator(UNION) | UNION运算,对应union语句 | 对应union语句 |
最后
以上就是感动溪流为你收集整理的三、 Hive 逻辑算子及其生成(上)的全部内容,希望文章能够帮你解决三、 Hive 逻辑算子及其生成(上)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复