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