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.
Azure Databricks prend en charge les clauses de gestion des contraintes SQL standard :
- Les contraintes appliquées vérifient l’intégrité des données avant d’ajouter des lignes à une table.
- Les contraintes de clé primaire informative et de clé étrangère définissent les relations entre les champs des tables et ne sont pas imposées.
Toutes les contraintes sur Azure Databricks nécessitent Delta Lake.
Pour un concept associé dans les pipelines déclaratifs Spark Lakeflow, consultez Gérer la qualité des données avec attentes de pipeline.
Contraintes imposées sur Azure Databricks
En cas de violation d’une contrainte, la transaction échoue avec une erreur. Azure Databricks prend en charge deux types de contraintes :
-
NOT NULL: indique que les valeurs de colonnes spécifiques ne peuvent pas être Null. -
CHECK: indique qu’une expression booléenne spécifiée doit avoir la valeur true pour chaque ligne d’entrée.
Important
Lorsque vous ajoutez une contrainte, Azure Databricks met automatiquement à niveau la version du protocole enregistreur de table si la version précédente de l’enregistreur était inférieure à 3. Consultez la compatibilité et les protocoles des fonctionnalités Delta Lake pour comprendre le versionnage des protocoles de table et ce que cela implique de mettre à jour la version du protocole.
Définir une contrainte NOT NULL dans Azure Databricks
Lorsque vous créez une table, spécifiez NOT NULL des contraintes dans le schéma. Pour ajouter ou supprimer des contraintes NOT NULL, utilisez la commande ALTER TABLE ... ALTER COLUMN.
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
Azure Databricks vérifie que toutes les lignes existantes répondent à la contrainte avant d’ajouter une contrainte NOT NULL à une table.
Si vous spécifiez une contrainte NOT NULL sur une colonne imbriquée dans un struct, le struct parent doit également ne pas avoir la valeur Null. Les colonnes imbriquées dans des types de tableau ou de mappage n’acceptent pas de NOT NULL contraintes.
Voir CREATE TABLE [USING] et ALTER TABLE ALTER COLUMN.
Définir une contrainte CHECK dans Azure Databricks
Gérez les contraintes CHECK avec les commandes ALTER TABLE ADD CONSTRAINT et ALTER TABLE DROP CONSTRAINT.
ALTER TABLE ADD CONSTRAINT vérifie que toutes les lignes existantes répondent à la contrainte avant d’ajouter la contrainte à la table.
Les restrictions suivantes s’appliquent aux contraintes de vérification :
- Une
CHECKexpression de contrainte peut utiliser toutes les fonctions SQL dans Spark qui retournent toujours le même résultat lorsqu’elles reçoivent les mêmes valeurs d’argument, à l’exception des types de fonctions suivants :- Fonctions définies par l’utilisateur.
- Fonctions d’agrégation.
- Fonctions de fenêtre.
- Les fonctions renvoyant plusieurs lignes.
Ajouter à une table existante
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;
Voir ALTER TABLE ADD CONSTRAINT et ALTER TABLE DROP CONSTRAINT.
Afficher les propriétés de la table de contraintes de vérification
Utilisez les commandes DESCRIBE DETAIL et SHOW TBLPROPERTIES pour afficher les contraintes de la table CHECK.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Supprimer les contraintes de vérification
Dans Databricks Runtime 15.4 LTS et versions ultérieures, utilisez la DROP FEATURE commande pour supprimer les contraintes de vérification d’une table et rétrograder le protocole de table.
Déclarer des relations de clé primaire et de clé étrangère
Les contraintes de clé primaire et de clé étrangère sont disponibles pour les tables Unity Catalog et Delta Lake dans Databricks Runtime 13.3 LTS et versions ultérieures, et sont en disponibilité générale dans Databricks Runtime 15.2 et versions ultérieures.
Les clés primaires et étrangères sont uniquement informationnelles et ne sont pas appliquées. Les clés étrangères doivent référencer une clé primaire dans une autre table. Les contraintes clés d’information peuvent améliorer les performances avec les optimisations des requêtes.
Interrogez le information_schema ou utilisez DESCRIBE pour obtenir des détails sur la façon dont les contraintes sont appliquées à travers un catalogue donné.
Ajouter à de nouvelles tables
Déclarez les clés primaires et les clés étrangères dans le cadre de la clause de spécification de table lors de la création de la table :
CREATE TABLE T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE TABLE S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T);
Les instructions CTAS ne prennent pas en charge cette clause de contrainte.
Ajouter à des tables existantes
Pour ajouter des contraintes à des tables existantes :
ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;