SparkSQL优化器Catalyst

0.047字数 521阅读 672

SQL优化器执行策略:规则优化和代价优化
规则优化是经验式,需要对数据元数据信息充分了解,主要体现在Join;
代价优化主要是解决Join,对业务人员不了解数据源信息,由优化器自己选择join策略。

Optimizer.png

概念

  • AST树
    SQL语法树是编译后被解析的树状结构,树包括很多对象,每个节点都有特定的数据类型,同事有孩子节点(TreeNode对象)。
  • 规则
    等价规则转化将规则用于语法树。任何一个SQL优化器中,都会定义大量的Rule,SQL优化器遍历所有节点。匹配所有给定规则,如果匹配成功进行相应转换;失败则继续遍历下一个节点。

Catalyst 工作流程

SQL语句首先通过Parser模块被解析为语法树,此棵树称为Unresolved Logical Plan;Unresolved Logical Plan通过Analyzer模块借助于数据元数据解析为Logical Plan;此时再通过各种基于规则的Optimizer进行深入优化,得到Optimized Logical Plan;优化后的逻辑执行计划依然是逻辑的,需要将逻辑计划转化为Physical Plan。

Catalyst .png
  1. Parser
    第三方类库ANTLR实现。将sql字符串切分成Token,根据语义规则解析成一颗AST语法树。
  2. Analyzer
    Unresolved Logical Plan,进行数据类型绑定和函数绑定。
  3. Optimizer
    规则优化就是模式匹配满足特定规则的节点等价转换为另一颗语法树

规则优化

常见的三种规则优化:谓词下推、常量累加、列剪枝

  • 谓词下推:扫描数据量过滤
  • 常量累加:减少常量操作
  • 列剪枝:对列式数据库提高扫描效率,减少网络、内存数据量消耗

sparkSQL查看优化器方法
queryExecution 查看逻辑执行计划
explain 查看物理执行计划

推荐阅读更多精彩内容