我知道比较加入策略是一个复杂的问题。
但是在通常情况下,我可以断言BroadcastHashJoin
比ShuffledHashJoin
更可取,而ShuffledHashJoin
比SortMergeJoin
更可取,而SortMergeJoin
比{ {1}}?
换句话说,Spark SQL根据此顺序选择连接策略,只要一个连接策略符合连接条件,它就会停止搜索其余策略。
如果上述内容正确,那么我不明白为什么Spark SQL选择BroadcastnestedLoopJoin
作为后备策略。
如果两个表都非常大,那么BroadcastnestedLoopJoin
如何保证在这种情况下能够成功执行?