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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值