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)仅支持内连接,需开启特定参数。
➡️

继续阅读