Bucket join 用户指南
什么时候我们需要一个bucket table?
如果表满足以下条件,则考虑将其构建为桶表:
- table很大,例如,table size 超过500GB
- 对于小表来说,只有当它用来与一个巨大的桶表连接时,才会出现这种情况。
- Sort Merge Join慢的原因是因为shuffle,而不是数据倾斜
如何选择桶字段?
如果你真的需要构建一个bucket table,在大多数情况下,你不需要。
选择正确的keys ,with high cardinality
-
可以均匀分布且不会导致数据倾斜的列。
好的选项:guid,user_id。不好的选项:page_id,agent_id。
如何选择Sort By columns?
Bucket columns 和 日期 类似的列 , 可以帮助跳过 filter 中的数据。或者干脆让Sort By column空着。
我们为什么需要bucket join?
我们知道,在Spark中的查询执行中,最重的操作符是shuffle。通过shuffle,我们可以确保不同任务得到相同的值,这是聚合和join执行的前提。对于某些表,连接模式或聚合模式是固定的。Spark并没有在每次执行中都进行洗牌,而是提供了一种实现洗牌结果的方法,即bucke