Spark - Spark SQL 中的 RBO, CBO 与 AQE 简单介绍-RBO(基于规则的优化)
最编程
2024-04-03 09:55:43
...
基于规则优化, 通过一系列预定好的规则(Rule)对逻辑计划进行等价转换, 以提高查询效率
两个主要思路
- 减少参与计算的数据量
- 降低重复计算的代价
常用的规则都基于经验指定, 可覆盖大部分查询场景, 且方便扩展, 缺点是不够灵活
常用规则例如
-
常量折叠(ConstantFolding)
把纯常量运算表达式预先转化, 比如把1+2转化为3.0, 消除不必要的重复计算 -
谓词下推(PushdownPredicate)
最常见的用于减少参与计算的数据量的方法
谓词, where条件, join on中的过滤条件
将SQL语句中的谓词逻辑尽量提前执行, 参与join的数据量大大减少, 使得join操作速度大大提高 -
列裁剪(ColumnPruning)
在扫描表时, 只筛选出符合后续逻辑计划的最小列集合, 节省掉扫描全部列的资源
如果使用的Parquet,ORC等列式存储格式持久化的, 效率会更高