About Cacher
Web App
Download
Sign In
Sign Up
menu
Cacher is the code snippet organizer for pro developers
We empower you and your team to get more done, faster
Learn More
coderplay
2/18/2013 - 1:39 AM
share
Share
add_circle_outline
Save
Hive Semantic Analyzer.md
Hive Semantic Analyzer.md
content_copy
file_download
Rendered
Source
SemanticAnalyzer主体流程
新建QueryBlock
预处理(语意分析)
获取MetaData
获取每个源table的相关结构
将视图替换, 重写, 并将其记入view别名
检查inputformat
保存alias->tab 至QB
为子查询获取meta
获取目标的相关结构, 目标有两种:表或本地目录
生成计划
递归生成子查询的计划, 将它放入 alias -> OP 的map里
优化
生成mapreduce任务
预处理 doPahse1
Select
向ParseInfo设置Select子查询
由FunctionRegistry判断select items表达式哪些是聚合函数, 从中获得 <Agg, AST >, 并设置
从select里获取col别名, AST->别名
获取distinct的Agg, 并设置
From
判断至少有一个源头表, 否则抛出异常
分别处理表、子查询、视图和Join
表
遍历tabref树, 查找表的别名, 一旦发现加到table别名里, 如果没有别名, 表名作为别名
在parseInfo记录别名->表AST信息
子查询
检查子查询, 至少得有一个, 否则抛出异常
递归
Where
Group By
看看是否有Join有group by 之前, 可作优化使用
Having
获取 <Agg, AST >, 并设置
Order By
Limit
生成逻辑查询计划(genPlan)
递归生成子查询的查询计划
生成Table的逻辑查询计划
生成View的逻辑查询计划
处理Join
clear