SQL面试题更新 2026-08-03

请说明在 Spark SQL 中,使用广播变量来优化大表之间 Join 的具体做法与原理是什么?

考察说明

考查对 Spark SQL 中广播变量优化 Join 的原理和适用场景的理解。

回答思路

  1. 【回答框架 1】广播变量是 Spark 提供的只读共享变量,将小表数据分发到每个 Executor 的内存中,避免在 Join 时产生大量的 Shuffle 数据。
  2. 【回答框架 2】在 Spark SQL 中,当一个大表与一个小表进行 Join 时,可以将小表广播到每个 Executor,这样大表的每个分区直接与小表的本地副本进行匹配,从而避免 Shuffle,提高性能。
  3. 【回答框架 3】Spark SQL 会自动根据表的大小决定是否使用广播,默认阈值为 10MB(可通过 spark.sql.autoBroadcastJoinThreshold 配置),但也可以手动使用 hint 如 /*+ BROADCAST(t) */ 强制广播。
  4. 【回答框架 4】适用场景是使用广播变量的表较小且 Join 操作频繁,能显著减少网络传输和 Shuffle 开销。对于超大表之间的 Join,广播一个完整表可能造成内存压力或 OOM,此时更适合使用分桶或排序合并 Join。
  5. 【关键点 1】广播变量将小表复制到每个 Executor,避免 Shuffle。
  6. 【关键点 2】Spark SQL 自动广播阈值默认为 10MB,可配置调整。
  7. 【关键点 3】手动使用 hint 如 BROADCAST 可强制指定广播。
  8. 【关键点 4】广播表过大可能导致 Driver 或 Executor 内存溢出,需权衡。
  9. 【易错点 1】误以为广播变量能无限制优化所有 Join,实际上广播表过大会造成内存问题。
  10. 【易错点 2】忽略自动广播配置,导致没有使用广播而性能不佳。
  11. 【易错点 3】广播变量是只读的,不能用于需要更新的场景。