CBO BackGround
直方图种类有:等宽直方图、等高直方图、V-优化的直方图
Enhancing Spark SQL Optimizer with Reliable Statistics
Spark Column histogram and CBO
介绍内容包括:
- Spark table statistics 和 column statistics
- Join Cost 在有无statistics下的计算区别
- Spark CBO 引入的参数:
- spark.sql.statistics.histogram.enabled : default = false,启用column histogram 信息收集
- spark.sql.cbo.joinReorder.card.weight : 在下面公式中CostCPU 占比
Cost = rows * weight + size * (1 - weight) Cost = CostCPU * weight + CostIO * (1 - weight)
- SQL优化Target
- Build侧选择 : 通过filter 算子后的估算,build side 和 probe side 可能互换
- 优化Join 类型: SortMergeJoin 变为 BroadcastJoin
- 优化Join Order: Left Deep Join 变为 Bushy Join
HIVE 0.14 Cost Based Optimizer (CBO) Technical Overview
CBO 三个优化效果
- Join ordering optimization
- Bushy join support
- Join simplification
Equi-depth Histogram Construction for Big Data with Quality Guarantees
这个不是等高直方图算法
构建等宽直方图
- 计算每个分区的Boundary,和 boundary size.
- 根据目标bins数量,计算目标 boundary size
- 合并每个分区boundary,得到近似Boundary
- µs 为计算误差,需要关注,论文中说明在实际大数据中误差较好
Hive:percentile_approx 原理与实现
主要介绍hive中percentile_approx函数的实现。函数的四个组成部分update、merge、sum 和 uniform,为了简化问题,这里只介绍 update 和 merge。
update:
- 填充Bin的x,y值
- Bin满了之后,进行合并bin
merge:
merge和update类似,直接合并bin区间
SPARK-17074 generate equi-height histogram for column
Spark 中equi-height histogram 计算,方式一还是依赖于percentile_approx
函数进行计算
Cost-Based Plan Selection Enumerate, Estimate, Select
基于前一算子的Cost,estimate 当前selection ,projection,join 等算子的cost 计算算法。