![3946e5b789821ec40bd60622366bfec6.png](https://i-blog.csdnimg.cn/blog_migrate/13010a6bc46036360cebd34fa8d570ac.jpeg)
HiveQL解析流程:
- Hive根据Antlr定义的词法、语法规则完成词法、语法分析将HQL解析为AST Tree;
- 遍历AST Tree,抽象出查询的基本组成单元Query Block;
- 遍历Query Block解析为操作树Operator Tree(即,逻辑执行计划);
- 逻辑优化器进行操作树变换,合并多余的ReduceSinkOperator,减少shuffle;
- 遍历Operator Tree,将操作树翻译为对应的MapReduce任务;
- 物理优化器进行MapReduce任务变换,生成最终的执行计划。
1、前言
Hive通过antlr3定义HiveQL语言。ANTLR是一个基于LL(*)算法实现的语言识别器,定义词法文件、语法文件,通过 antlr 可以构造出相应的词法分析器 (Lexer)、语法分析器 (Parser) 和树分析器 (Tree Parser)。
词法分析器(Lexer):校验输入字符的合法性,将无含义的字符流翻译为有意义的单词(token),识别关键字,生成token流。
语法分析器(Parser):语法分析器将获取到的token流组织,按照语法规则进行重写生