Spark SQL五大关联策略
💡
原文中文,约2500字,阅读约需6分钟。
📝
内容提要
选择连接策略的核心原则是避免shuffle和sort操作,首选的连接策略是hash连接。连接策略可通过连接提示进行控制,重要因素是连接数据集的大小。广播散列连接和洗牌散列连接是常用的连接策略。洗牌排列合并连接将两张大表按照join key分区洗牌并排序。笛卡尔积连接将两张大表进行分片,再进行笛卡尔积组装子分片。广播嵌套循环连接通过广播小表数据到每个Executor端,并使用内、外两个嵌套的for循环进行关联。
🎯
关键要点
- 选择连接策略的核心原则是避免shuffle和sort操作,首选hash连接。
- 常用的连接策略包括广播散列连接(BHJ)、洗牌散列连接(SHJ)、洗牌排列合并连接(SMJ)、笛卡尔积连接(CPJ)和广播嵌套循环连接(BNLJ)。
- 等值连接只包含'='比较,非等值连接包含其他比较,只有CPJ和BNLJ支持非等值连接。
- Spark SQL提供四种连接提示:BROADCAST、SHUFFLE_MERGE、SHUFFLE_HASH、SHUFFLE_REPLICATE_NL。
- 选择连接策略时,连接数据集的大小是最重要的因素。
- 广播散列连接(BHJ)分为广播阶段和关联阶段,限制条件包括小表大小和数据集总行数。
- 洗牌散列连接(SHJ)也分为洗牌阶段和关联阶段,限制条件包括小表大小和相对大小要求。
- 洗牌排列合并连接(SMJ)包括洗牌、排序和关联阶段,连接键必须可排序。
- 笛卡尔积连接(CPJ)分为分区和关联阶段,使用嵌套循环进行关联。
- 广播嵌套循环连接(BNLJ)仅支持内连接,需开启特定参数。
➡️