Я знаю, что сравнение стратегий объединения - сложная проблема.
Но в обычных случаях я могу утверждать, что BroadcastHashJoin
предпочтительнее, чем ShuffledHashJoin
, и ShuffledHashJoin
предпочтительнее, чем SortMergeJoin
, и SortMergeJoin
предпочтительнее, чем BroadcastNestedLoopJoin
?
Другими словами, Spark SQL выбирает стратегию объединения на основе этого порядка, если для объединения определена одна стратегия объединения, он просто прекращает поиск оставшихся стратегий.
Если выше указаноПравда, тогда я не понимаю, почему Spark SQL выбирает BroadcastNestedLoopJoin
в качестве запасной стратегии. Если обе эти таблицы чрезвычайно велики, как BroadcastNestedLoopJoin
может гарантировать успешное выполнение в этой ситуации?