hive代码研究--运行原理(2)- genplan过程
来源:互联网 发布:企业即时沟通软件 编辑:程序博客网 时间:2024/04/28 14:56
genplan是语法分析最重要的一个阶段,在genplan过程中生成一个算子树。
1、一条sql语句的结构:
一条sql主要包括,insert子句,select子句,from子句,groupby子句,以及其他的条件子句,如limit,orderby等,还有join和union等操作符。其中的from子句,一般可以直接跟一个表,多个表(笛卡尔积等同于join),或者一个子查询,或者由join或union连接的两个表,或者两个子查询。包含子查询则意味着sql语句自身会包含这一些递归的操作。
2、hive对一条sql执行的过程:
一条sql语句(以查询sql为例)的目的最终是将一个表或者若干个表中的所有行数据,一条一条的进行处理,最终生成一组目标记录。为了实现这样的目的,首先将处理过程分解为若干个算子,将初始的表数据记录依次通过这些算子来计算,最终得出结果。
例如:select a from tbl where b>1 order by c,对于这条sql,首先需要一个ts(table scan)算子,从表中读出数据,然后读出的数据经过一个fil(filter)算子,过滤那些不满足条件b>1的数据,最后经过一个fetch算子,将正确的数据返回。对于任意复杂的sql语句都可以生成这样的算子树进行处理。
3、genplan的过程:有了以上信息以后可以根据ast树生成算子树
1)任何一个查询子句首先检查这个子句有没有子查询语句,如果有首先递归的对子查询语句进行处理得出子查询的算子树,这个算子树的唯一输出算子,作为本查询的输入算子。
2)一个查询子句的输入来源,要么是子查询语句,要么就是来自表 ,那么一个查询在处理完子查询以后,要对输入表进行处理,生成一个tablescan算子
3)生成genLateralViewPlans算子??
4)对于from子句包含join的查询语句来说,这里必须对join进行处理,生成join算子
5)以上的处理都集中于输入数据的算子处理上,完成这些以后进入genbodyplan,主要处理select子句,groupby等子句
6)对于每个输入源,分析过滤条件,生成一个FilterOperator作为一个子op
7)生成groupby operator
8)生成hiveing operator
9)生成select operator
10)生成filesink operator
以上就是operator tree,实际上这个数据结构不一定有唯一的根节点,也并不一定有唯一的归宿节点,最终按照这个树即可实现sql的语义。
- hive代码研究--运行原理(2)- genplan过程
- hive代码研究--运行原理(1)- 整体框架
- Hive运行原理
- java代码运行过程
- hive源码解析之运行原理
- 【hadoop hive】hive udaf开发入门和运行过程详解
- java 执行过程 运行原理
- Struts2框架运行过程研究--init方法
- Struts2框架运行过程研究--init方法
- 【内核研究】程序的运行过程
- MF研究:TinyCLR运行时原理
- 在江南研究jsunpackn (运行原理)
- JSP运行原理及运行过程
- JSP运行原理及运行过程
- JSP运行原理及运行过程
- hive代码研究--设计模式(1)- 图(树)遍历
- dedecms代码研究(2)
- JSP的执行过程,运行原理(图)
- 在 Ubuntu 11.04 Natty 中解除系统托盘限制
- Tomcat 架构图 (转载)
- Java 之反射机制
- log4Net
- 记录浏览过的商品
- hive代码研究--运行原理(2)- genplan过程
- web服务器控件—导航控件—SiteMapPath
- 程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
- 不定参数函数
- forward redirct 转向和重定向区别;通过el和java代码在jsp页面取出参数,jsp:param注意事项
- 哈工大java实验 文件分割与合并
- 运行于Windows中的GIZA++( GIZA++ working inWindows Platform)
- 推荐图书:我的职场十年
- 常见SSL证书格式转换