Maison > base de données > tutoriel mysql > Pourquoi les FDU dans les jointures SQL produisent-elles parfois des produits cartésiens au lieu des jointures attendues ?

Pourquoi les FDU dans les jointures SQL produisent-elles parfois des produits cartésiens au lieu des jointures attendues ?

Patricia Arquette
Libérer: 2024-12-18 16:38:17
original
134 Les gens l'ont consulté

Why Do UDFs in SQL Joins Sometimes Produce Cartesian Products Instead of Expected Joins?

Pourquoi les FDU conduisent à des produits cartésiens dans les requêtes SQL

Lors de l'utilisation de SQL, les fonctions définies par l'utilisateur (FDU) peuvent introduire des problèmes de performances inattendus. Cela est particulièrement évident dans les opérations de jointure, où les FDU peuvent conduire à des produits cartésiens au lieu de la jointure externe complète souhaitée.

Cause des produits cartésiens

L'utilisation des FDU nécessite l'évaluation de fonctions arbitraires avec des domaines potentiellement infinis et un comportement non déterministe. Pour déterminer la valeur de ces fonctions, le système doit considérer toutes les combinaisons d'arguments possibles, aboutissant à un produit cartésien.

Exemple

Considérez les requêtes SQL fournies dans le fichier donné Databricks-Question :

-- Query 1: Join without UDF
SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON t1.foo = t2.bar;

-- Query 2: Join with UDF
SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON equals(t1.foo, t2.bar);
Copier après la connexion

Dans la requête 1, la simple condition d'égalité permet le brassage des données en fonction du foo et des colonnes à barres, produisant le résultat attendu. Cependant, dans la requête 2, l'utilisation de la fonction UDF égale nécessite d'évaluer la fonction pour toutes les combinaisons de paires possibles, ce qui donne un produit cartésien.

Solution

Forcer une valeur externe la jointure sur un produit cartésien n'est généralement pas possible sans modifier le moteur Spark SQL. Cependant, l'optimisation de l'UDF elle-même pour réduire le nombre d'évaluations pourrait atténuer une partie de la dégradation des performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal