HIVE SQL的执行流程
SQL ON HADOOP ⇒ Cluster
SQL ⇒ Parser ⇒ AST(抽象语法树) ⇒ Analyzer⇒ QB⇒ Logical Plan⇒ Operator Tree⇒ Logical Optimizer⇒ Operator Tree ⇒ Physical Plan ⇒TaskTree⇒ Physical Optimizer⇒ Task Tree
首先是一个parser(解析),sql解析成抽象语法树,语法树是一个字符串,如:
(TOK_QUERY (TOK_FROM (TOK_TABREF src)) # 起始表
(TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) # 目标表
(TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) #某个字段
(TOK_SELEXPR (TOK_FUNCTION sum #函数
(TOK_FUNCTION substr (TOK_COLREF src value) 4)))) #
(TOK_GROUPBY (TOK_COLREF src key))))
遍历AST Tree,抽象出查询的基本组成单元QueryBlock,遍历QueryBlock,生成逻辑执行计划(logical plan),一堆的operator,然后进行Logical Optimizer(逻辑优化),产出还是一堆Operator Tree,之后生成物理执行计划,也就是MapReduce Task,然后进行物理层优化,最后提交运行
更加详细的内容可阅读这篇文章: