Heim >Datenbank >MySQL-Tutorial >Warum erzeugen UDFs in SQL-Abfragen manchmal kartesische Produkte anstelle von Outer Joins?
UDFs in SQL-Abfragen und kartesischen Produkten
Die Verwendung benutzerdefinierter Funktionen (UDFs) in SQL-Abfragen kann zu einem kartesischen Produkt führen anstelle des beabsichtigten vollständigen äußeren Joins. Ein kartesisches Produkt entsteht, wenn alle Zeilen einer Tabelle mit allen Zeilen einer anderen Tabelle kombiniert werden, was zu einem viel größeren Datensatz als bei einem vollständigen Outer-Join führt.
Warum verursacht eine UDF ein kartesisches Produkt?
UDFs führen zu einer zusätzlichen Komplexitätsebene, die eine Optimierung durch die Abfrage-Engine verhindert. Eine UDF kann eine beliebige Anzahl von Argumenten mit nicht deterministischem Verhalten akzeptieren. Um die UDF für alle möglichen Zeilenkombinationen auszuwerten, muss die Abfrage-Engine ein kartesisches Produkt durchführen.
Im Gegensatz dazu weist ein einfacher Gleichheitsvergleich zwischen Spalten (z. B. t1.foo = t2.bar) ein vorhersehbares Verhalten auf . Die Abfrage-Engine kann dies nutzen, um den Join zu optimieren, indem Zeilen basierend auf den Spalten „foo“ und „bar“ gemischt werden, sodass kein kartesisches Produkt erforderlich ist.
Erzwingen von Outer Joins
Leider gibt es im obigen Beispiel keine einfache Möglichkeit, einen Outer Join über ein kartesisches Produkt zu erzwingen. Die einzige Möglichkeit wäre, die Spark SQL-Engine zu modifizieren.
Wie oben erläutert, ist das kartesische Produkt eine Folge der willkürlichen und nichtdeterministischen Natur von UDFs. Die Abfrage-Engine kann sie nicht optimieren, ohne zusätzliche Einschränkungen einzuführen.
Das obige ist der detaillierte Inhalt vonWarum erzeugen UDFs in SQL-Abfragen manchmal kartesische Produkte anstelle von Outer Joins?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!