hive底层原理 sql执行过程_hive工作原理之SQL源码解析

本文介绍了Hive SQL如何转化为MapReduce任务的过程,包括ANTLR词法解析生成AST树,解析成QB对象,QBParseInfo存储AST结构和元信息,SemanticAnalyzer分析生成Operator树,以及最终优化并转化为MapReduce任务的步骤。
摘要由CSDN通过智能技术生成

hive自带的sql查询最终是转化成mapreduce任务进行。

如何转换的呢?

分为如下几步:

1、antlr词法解析器解析SQL成Abstract Syntax Tree即AST树

2、基于AST树解析成若干query block即QB,QB和QBParseInfo其实是hive源码里面的Bean,是SQL解析的关键类

下边是QB的关键几个成员如下:

public classQB {private static final Log LOG = LogFactory.getLog("hive.ql.parse.QB");private final int numJoins = 0;private final int numGbys = 0;private int numSels = 0;private int numSelDi = 0;private HashMapaliasToTabs;private HashMapaliasToSubq;private HashMap>aliasToProps;private Listaliases;privateQBParseInfo qbp;privateQBMetaData qbm;privateQBJoinTree qbjoin;privateString id;private booleanisQuery;private booleanisAnalyzeRewrite;private CreateTableDesc tblDesc = null; //table descriptor of the final

private CreateTableDesc directoryDesc = null;private ListencryptedTargetTablePaths;

......

aliasToSubq(表示QB类的aliasToSubq属性)保存子查询的QB对象,aliasToSubq key值是子查询的别名

qbp 即QBParseInfo保存一个基本SQL单元中的给个操作部分的AST Tree结构,

qbm保存每个输入表的元信息,比如表在HDFS上的路径,保存表数据的文件格式等。

下面是QBParseInfo主要成员:

public classQBParseInfo {private final booleanisSubQ;private finalString alias;privateASTNode joinExpr;privateASTNode hints;private final HashMapaliasToSrc;/*** insclause-0 -> TOK_TAB ASTNode*/

private final HashMapnameToDest;/*** For 'insert into FOO(x,y) select ...' this stores the

* insclause-0 -> x,y mapping*/

private final Map>nameToDestSchema;private final HashMapnameToSample;private final MapexprToColumnAlias;private final MapdestToSelExpr;private final HashMapdestToWhereExpr;private final HashMapdestToGroupby;private final SetdestRollups;private final SetdestCubes;private final SetdestGroupingSets;private final MapdestToHaving;private final HashSetinsertIntoTables;

......

QBParseInfo下面的JoinExpr保存TOK_JOIN节点。QB#QBJoinTree是对Join语法树的结构化。

QBParseInfo#nameToDest这个HashMap保存查询单元的输出,key的形式是inclause-i(由于Hive 支持Multi Insert语句,所以可能有多个输出),value是对应的ASTNode节点,即TOK_DESTINATION节点。

类QBParseInfo其余 HashMap属性分别保存输出和各个操作的ASTNode节点的对应关系。

3、通过SemanticAnalyzer分析类把QB解析成Operator操作树

4、优化操作树

5、基于OperatorTree解析成MapReduce任务

其中antlr是一个开源的词法解析器,AST树也不是什么特殊的树,就是普通的树结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值