hive学习三

来更新一下我的叨叨叨。
在Driver.java文件中有这么一段程序
在这里插入图片描述

用方框圈住的地方,是sql 开始转化为抽象语法树的位置,但此时生成的生成的抽象语法树是不能被直接处理的,因为现在生成的抽象语法树是Nil开头的语法树。所以就会有第二步的操作,获得TOK_QUERY开头的ASTNode。(根据我观察到的语法树,TOK_QUERY子节点分为TOK_FROM和TOK_INSERT,在这里我有一个小小的猜测,TOK_FROM对应了map阶段,而TOK_INSERT对应了reduce阶段。仅仅是猜测,博客也是根据源码读到哪,写到哪)
在翻译成ASTNode后需要找到合适的语义分析器,在源码中发现是通过工程模式,
在这里插入图片描述
通过get方法内通过判断第一个ASTNode的TOKEN_NAME(每一个ASTNode都有一个用来存储子节点的ArrayList属性),获取不同的语义分析器。普通的查询语句由SemanticAnalyzer负责。

对ASTNode所有的解析是通过下图的方法展开的。
在这里插入图片描述先说第一个方法genResolvedParseTree(…)
在这里插入图片描述
通过这个方法可以将ASTNode转变为QueryBlock。这个方法中最为核心的就是
在这里插入图片描述dophase1会将ASTNode中的内容解析到QueryBlock中。
在QueryBlock中有两个属性是 QBParseInfo、QBMetaData。QBParseInfo会直接存储group by 、sort by、where 等信息。sql语句中的源表目标表信息会经过元数据库的检查,存储到QBMetaData中。
hive 将ASTNode node解析为QueryBlock的方式是遍历每一个node节点,如果node节点下面还有子node,先遍历完全部的子节点后,在遍历同级别的node。ASTNode是存储在ArrayList里面,因为ArrayList是一个数组,数组的优势之一就是查找 ,ASTNode一旦生成,不会改动,只是频繁的查找,每一个node中会记录自己的父节点和子节点。
因为篇幅的关系,无法把所有的处理方法都记录在这里,以processJoin简单说明。
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值