您现在的位置:首页 > >

hive源码

发布时间:

CliDriver进入console的解析




Driver进行


step1 =>analyze


analyze进行compile,


compile调用


i. ? genResolved (1.dophase1 ? 2.metadata)


ii. ?genOp


iii. compileTask






step2 =>execute






compile阶段详细:


dophase1主要将ast信息解析到queryBlock QB


genplan主要根据QB将信息读取后构建operator树


compiletask主要根据operator树的模式匹配成mr任务




QB的详细结构:


1.QueryParseInfo ?==> 存储详细解析信息 (1.joinExpr 2.isSubQ)


2.JoinTree


3.aliastotable ? ?====> 存储表(alias=>table)


4.aliastosubquery ? ?===>存储子查询 ?(alias=>QBExpr)


5.metadata








QBExpr的详细结构:


? ? QB


? ? ope = nullope




? ? QBExpr1


? ? ? ? QB


? ? QBExpr2


? ? ? ? QB


? ? ?ope = union




QB的表达式有三种,目前hive就实现了一种union并集


nullop, union, intersect,diff






qb链如何形成:


qb里藏qbexpr,qbexpr藏qb 形成qb链






形成qb链后,解析qb,


首先从





aliastotable ? ?====> 存储表(alias=>table)


aliastosubquery ? ?===>存储子查询 ?(alias=>QBExpr)




解析tablescanoperator


然后解析groupby


where


select


继而形成operator tree








关于join的处理和存储:


遇到join节点,将join节点set到当前QB的QBP


进而解析当前节点


遍历所有子节点


遇到join就递归


如果不是join,


一般为table,subquery,他们是类似的东西,subquery的结果不就是张表。




subquery下有union和query两种,union下有union和query两种可能。








在genPlan阶段, 生成操作树,


根据joinExpr来genJoinTree(), 将tree set到当前QB, 之后进行genbody,在genbody中genfilter 和genselect, gengroupby




JoinTree的结构:


left ? right ? jointree










热文推荐
猜你喜欢
友情链接: