Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les contraintes de clé primaire, qui capturent les relations entre les champs des tables, peuvent aider les utilisateurs et les outils à comprendre les relations dans vos données. Cet article contient des exemples qui montrent comment utiliser des clés primaires avec l’option RELY pour optimiser certains types de requêtes courants.
Remarque
Les optimisations de requête associées à la commande RELY nécessitent que les requêtes s'exécutent sur un calcul activé par Photon. Consultez Qu’est-ce que Photon ?. Photon s’exécute par défaut sur les entrepôts SQL et le calcul serverless pour les notebooks et les flux de travail. Pour en savoir plus sur Photon, consultez Qu’est-ce que Photon ?.
Ajouter des contraintes de clé primaire
Vous pouvez ajouter une contrainte de clé primaire dans votre instruction de création de table, comme dans l’exemple suivant, ou ajouter une contrainte à une table à l’aide de la clause ADD CONSTRAINT.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
Dans cet exemple, c_customer_sk est la clé d’ID client. La contrainte de clé primaire spécifie que chaque valeur d’ID client doit être unique dans la table. Azure Databricks n’applique pas de contraintes de clé. Elles peuvent être validées via votre pipeline de données existant ou ETL. Consultez Gérer la qualité des données avec des attentes de pipeline pour en savoir plus sur les attentes de travail sur les tables de streaming et les vues matérialisées. Consultez Contraintes sur Azure Databricks pour en savoir plus sur l’utilisation des contraintes sur les tables Delta.
Remarque
Il incombe à l’utilisateur de vérifier si une contrainte est satisfaite. L’utilisation d’une contrainte qui n’est pas satisfaite peut entraîner des résultats de requête incorrects.
Utilisez RELY pour activer les optimisations
Lorsque vous savez qu’une contrainte de clé primaire est valide, vous pouvez activer les optimisations en fonction de la contrainte en la spécifiant avec l’option RELY. Consultez ADD CONSTRAINT la clause de la syntaxe complète.
L’option RELY permet à Azure Databricks d’exploiter la contrainte pour réécrire des requêtes. Les optimisations suivantes ne peuvent être effectuées que si l’option RELY est spécifiée dans une clause ADD CONSTRAINT ou une instruction ALTER TABLE.
À l'aide de ALTER TABLE, vous pouvez modifier la clé primaire d'une table pour inclure l'option RELY, comme illustré dans l'exemple suivant.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Exemples d’optimisation
Les exemples suivants étendent l’exemple précédent qui crée une table customer dans laquelle c_customer_sk est un identificateur unique vérifié nommé PRIMARY KEY avec l’option RELY spécifiée.
Exemple 1 : Éliminer les agrégations inutiles
Voici une requête qui applique une opération DISTINCT à une clé primaire.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Étant donné que la colonne c_customer_sk est une contrainte de PRIMARY KEY vérifiée, toutes les valeurs de la colonne sont uniques. Avec l’option RELY spécifiée, Azure Databricks peut optimiser la requête en n’effectuant pas l’opération DISTINCT.
Exemple 2 : Éliminer les jointures inutiles
L’exemple suivant montre une requête dans laquelle Azure Databricks peut éliminer une jointure inutile.
La requête joint une table de faits, store_sales, avec une table de dimension, customer. Elle effectue une jointure externe gauche, de sorte que le résultat de la requête inclut tous les enregistrements de la table store_sales et les enregistrements correspondants de la table customer. S’il n’existe aucun enregistrement correspondant dans la table customer, le résultat de la requête affiche une valeur NULL pour la colonne c_customer_sk.
SELECT
SUM(ss_quantity)
FROM
store_sales ss
LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;
Pour comprendre pourquoi cette jointure n’est pas nécessaire, envisagez l’instruction de requête. Elle ne nécessite que la colonne ss_quantity de la table store_sales. La table customer est jointe à sa clé primaire. Par conséquent, chaque ligne de store_sales correspond au maximum à une ligne dans customer. Étant donné que l’opération est une jointure externe, tous les enregistrements de la table store_sales sont conservés, de sorte que la jointure ne modifie aucune donnée de cette table. L’agrégation SUM est identique si ces tables sont jointes ou non.
L’utilisation de la contrainte de clé primaire avec RELY donne à l’optimiseur de requête les informations dont elle a besoin pour éliminer la jointure. La requête optimisée ressemble davantage à ceci :
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Étapes suivantes
Consultez Afficher le diagramme de relation d’entité pour découvrir comment explorer les relations de clé primaire et de clé étrangère dans l’interface utilisateur de l’explorateur de catalogues.