tongchenkeji 发表于:2023-12-19 6:45:330次点击 已关注取消关注 关注 私信 大数据计算MaxCompute生产中有两个表,有没有其他优化方案?[阿里云] 暂停朗读为您朗读 大数据计算MaxCompute生产中有两个表,且两表数据不符合mapjoin规范,且必须做优化时,有没有其他优化方案? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 阿里云# MaxCompute2748# 云原生大数据计算服务 MaxCompute3255# 分布式计算2827# 大数据1264
xin在这AM 2023-12-21 7:15:13 1 可以看下这个文档哈。https://help.aliyun.com/zh/maxcompute/use-cases/data-skew-tuning/?spm=a2c4g.11186623.0.i49#p-b10-lf2-xu9 ,此回答整理自钉群“MaxCompute开发者社区2群”
sun20AM 2023-12-21 7:15:13 2 当两个表进行Join操作时,如果它们的数据不符合MapJoin规范,您可以尝试以下优化方案: 使用WHERE子句进行过滤:在MaxCompute SQL中,当两个表进行Join操作时,建议在主表的分区限制条件位置使用WHERE子句。具体来说,可以先用子查询过滤数据,然后在主表的WHERE子句中写入这些条件。 开启SkewJoin功能:MaxCompute提供了数据倾斜设置参数 set odps.sql.skewjoin=true; 开启SkewJoin功能。但需要注意,仅仅开启SkewJoin并不能对任务的运行产生实际影响。 使用Sort-Merge Join算法:这是一种常见的连接算法,适用于大表之间的连接操作。其基本思想是将两个大表按照连接键进行排序,然后逐个比较并合并相同连接键的记录。 使用Broadcast Join算法:当一个大表非常大于另一个表时,可以使用Broadcast Join算法。该算法将小表复制多份,分发到各个节点上,每个节点都对小表执行局部Join操作,最后再将各个节点的结果合并。 使用Bucketed MapJoin算法:当两个表的大小相对较大且连接键分布均匀时,可以考虑使用Bucketed MapJoin算法。这种算法首先按照连接键对两个表进行桶化处理,然后将两个表的数据分发到各个节点上执行局部Join操作,最后再将各个节点的结果合并。
可以看下这个文档哈。https://help.aliyun.com/zh/maxcompute/use-cases/data-skew-tuning/?spm=a2c4g.11186623.0.i49#p-b10-lf2-xu9 ,此回答整理自钉群“MaxCompute开发者社区2群”
当两个表进行Join操作时,如果它们的数据不符合MapJoin规范,您可以尝试以下优化方案:
使用WHERE子句进行过滤:在MaxCompute SQL中,当两个表进行Join操作时,建议在主表的分区限制条件位置使用WHERE子句。具体来说,可以先用子查询过滤数据,然后在主表的WHERE子句中写入这些条件。
开启SkewJoin功能:MaxCompute提供了数据倾斜设置参数 set odps.sql.skewjoin=true; 开启SkewJoin功能。但需要注意,仅仅开启SkewJoin并不能对任务的运行产生实际影响。
使用Sort-Merge Join算法:这是一种常见的连接算法,适用于大表之间的连接操作。其基本思想是将两个大表按照连接键进行排序,然后逐个比较并合并相同连接键的记录。
使用Broadcast Join算法:当一个大表非常大于另一个表时,可以使用Broadcast Join算法。该算法将小表复制多份,分发到各个节点上,每个节点都对小表执行局部Join操作,最后再将各个节点的结果合并。
使用Bucketed MapJoin算法:当两个表的大小相对较大且连接键分布均匀时,可以考虑使用Bucketed MapJoin算法。这种算法首先按照连接键对两个表进行桶化处理,然后将两个表的数据分发到各个节点上执行局部Join操作,最后再将各个节点的结果合并。