有几个华为的大牛给 spark sql 做了 cost-based optimizer
jira task 在 https://issues.apache.org/jira/browse/SPARK-16026
design specs 在
https://issues.apache.org/jira/secure/attachment/12823839/Spark_CBO_Design_Spec.pdf
分享的 slides 在
https://spark-summit.org/2016/events/enhancing-spark-sql-optimizer-with-reliable-statistics/
大概读了下,记录如下
1.改了哪里
改动大概在这里
2.做了什么.
2.1 统计信息
收集字段的统计信息,最大值,最小值,空值,唯一值和统计直方图
统计直方图有两种:定宽和定高的,小于 256 个唯一值的时候定宽,大于的时候定高
2.2 关联
两表 hash 关联的时候根据到达这一步的总体 cost 来选择驱动表( build / probe)
多表关联的时候使用动态规划来决定 join order,先找出两表关联时 cost 最低的,然后是第三个表和这个中间表关联...最后根据所有关联总的 cost 计算 cost
2.3 cost function
目前实现的是 phase 1 ,两表关联时的 cost 就是结果集的大小,未来会实现和 teradata 类似的,考虑各种执行时的 cost
2.4 Cardinality Estimation
还没细看,感觉和其他 cbo 的 rdbms 差不多
2.5 会给所有 executor 算一个 cost
3.jira 上提到的问题
感觉好像没有特别考虑 geography 的问题,目前的实现也没有考虑不同表格式带来的影响, 另外这个 spec 最开始只给 databricks 公司里的 commiter 看过,社区其他 committer 好像对此颇有微词
总之还是很牛逼的,膜拜下大牛们
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.