云原生大数据计算服务 MaxCompute - MaxCompute SQL 支持SkewJoin Hint用于优化join时数据长尾问题
Feb 08 2021
云原生大数据计算服务 MaxCompute适用客户
开发者
新增功能/规格
当两张表Join存在热点,导致出现长尾问题时,您可以通过取出热点key,将数据分为热点数据和非热点数据两部分进行处理,最后合并的方式,提高Join效率。SkewJoin Hint可以通过自动或手动方式获取两张表的热点key,分别为热点数据和非热点数据使用优化的Join方法,并自动将结果合并,为用户提供一种解决join时常见的处理厂为问题的优化手段。 在不加SkewJoin Hint的情况下,将表T0和表T1进行Join,由于T0和T1的数量都很大,只能进行MergeJoin,因此相同的热值都会Shuffle到一个节点,导致数据倾斜。加SkewJoin Hint后,优化器会运行一个Aggregate动态获取重复行数前20(可设置)的热值,并将表T0中属于热值的值(数据A)、T0中不属于热值的值(数据B)拆分;将表T1中能与T0中热值Join的值(数据C)、表T1中不能与T0中热值Join的值(数据D)进行拆分。然后将数据A与数据C进行MapJoin(由于数据C量很少,可以进行MapJoin),将数据B和数据D进行MergeJoin。最后将MapJoin和MergeJoin的结果Union,生成最后的结果。