Spark Whole Stage Codegen 解析
一、基于规则优化
1.谓词下推
2.列裁剪
3.常量折叠
二、基于代价优化
1.统计收集信息:Statistics Collection Framework
表级 字段级 统计信息:Table/Column Level Statistics Collected
表级统计:
ANALYZE TABLE table-name COMPUTE STATISTICS
统计维度:
– 行数:Number of rows
– 表存储容量:Table size in bytes
统计结果示例:
字段级别统计:
ANALYZE TABLE table-name COMPUTE STATISTICS FOR COLUMNS column-name1, column-name2, ....
统计信息:
1)Numeric/Date/Timestamp type 字符型/时间类型
✓ Distinct count
✓ Max
✓ Min
✓ Null count
✓ Average length (fixed length) ✓ Max length (fixed length)
2)String/Binary type 字符串/二进制类型
✓ Distinct count
✓ Null count
✓ Average length
✓ Max length
统计结果示例:
– Cardinality Estimation (Filters, Joins, Aggregates etc.)
2.代价优化• Cost-based Optimizations – Build Side Selection
– Multi-way Join Re-ordering
3.代价优化如何发挥作用!
例如:
A表 join B表 根据统计信息
A表col1 字段 和 B字段col2统计信息
col1的最小值 > B字段col2的最大值
那么join时不会有结果。