
上图展示了 Logical Plan 在整个 SQL 解析中所在的位置,并阐述 Logical Plan 经历的三个步骤
- Unresolved Logical Plan:由
SparkSqlParser将语法树/DF/DataSet 转换成未解析的逻辑算子树,不包含数据信息与列信息 - Logical Plan:
Analyzer将一系列规则作用在未解析的逻辑树,对树节点绑定各种数据信息,生成解析后的逻辑树 - Optimized Logical Plan:
Optimeizer将优化规则作用到上一步的逻辑树,确保结果正确下改写低效的结构,生成优化后的逻辑算子树
Logical Plan 主要记录了该逻辑节点处理逻辑相关的属性,包括输入输出、约束条件、算子逻辑和统计信息等。
Unresolved Logical Plan
SparkSqlParser

- ParserInterface:面向用户的接口,包含 SQL语句,表达式,数据标识符的解析方法
- AbstractSqlParser:实现 ParserInterface 并包含 AstBuilder
- AstBuilder:继承 SqlBaseBaseVisitor,生成语法抽象树
- SparkSqlAst-Builder:继承 AstBuilder,并增加 DDL 操作,在 SparkSqlParser 中调用
- SparkSqlParser:继承 AbstractSqlParser,用于外部调用
Logical Plan
Optimized Logical Plan
参考资料
Spark SQL 内核剖析