Contraintes sur Azure Databricks

Azure Databricks prend en charge les clauses de gestion des contraintes SQL standard. Les contraintes se répartissent en deux catégories :

  • Les contraintes appliquées garantissent que la qualité et l’intégrité des données ajoutées à une table sont automatiquement vérifiées.
  • Les contraintes de clé primaire et de clé étrangère encodent les relations entre champs dans les tables. Elles sont fournies à titre informatif et ne sont pas appliquées.

Toutes les contraintes sur Azure Databricks nécessitent Delta Lake.

Delta Live Tables a un concept similaire appelé « attentes ». Consultez Gérer la qualité des données avec Delta Live Tables.

Contraintes appliquées sur Azure Databricks

En cas de violation d’une contrainte, la transaction échoue avec une erreur. Deux types de contraintes sont pris en charge :

  • 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

L’ajout d’une contrainte met automatiquement à niveau la version du protocole du rédacteur de table si la version précédente du rédacteur était inférieure à 3. Consultez Comment Azure Databricks gère-t-il la compatibilité des fonctionnalités Delta Lake ? pour comprendre le contrôle de version du protocole de table et ce que signifie mettre à niveau la version de protocole.

Définir une contrainte NOT NULL dans Azure Databricks

Vous spécifiez des contraintes NOT NULL dans le schéma quand vous créez une table. Vous supprimez ou ajoutez des contraintes NOT NULL avec 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
) USING DELTA;

ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;

Avant d’ajouter une contrainte NOT NULL à une table, Azure Databricks vérifie que toutes les lignes existantes satisfont à la contrainte.

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 tableaux ou de mappages n’acceptent pas de contraintes NOT NULL.

Consultez CREATE TABLE [USING] et ALTER TABLE ALTER COLUMN.

Définir une contrainte CHECK dans Azure Databricks

Vous gérez les contraintes CHECK à l’aide des commandes ALTER TABLE ADD CONSTRAINT et ALTER TABLE DROP CONSTRAINT. ALTER TABLE ADD CONSTRAINT vérifie que toutes les lignes existantes satisfont à la contrainte avant de l’ajouter à la table.

CREATE TABLE people10m (
  id INT,
  firstName STRING,
  middleName STRING,
  lastName STRING,
  gender STRING,
  birthDate TIMESTAMP,
  ssn STRING,
  salary INT
) USING DELTA;

ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;

Consultez ALTER TABLE ADD CONSTRAINT et ALTER TABLE DROP CONSTRAINT.

Les contraintes CHECK sont exposées en tant que propriétés de table dans la sortie des commandes DESCRIBE DETAIL et SHOW TBLPROPERTIES.

ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Déclarer des relations de clé primaire et de clé étrangère

Important

Cette fonctionnalité est disponible en préversion publique.

Remarque

  • Les contraintes de clé primaire et de clé étrangère sont disponibles dans Databricks Runtime 11.3 LTS et versions ultérieures.
  • Les contraintes de clé primaire et de clé étrangère nécessitent Unity Catalog et Delta Lake.

Vous pouvez utiliser des relations de clé primaire et de clé étrangère sur les champs dans des tables Unity Catalog. Les clés primaires et étrangères sont fournies à titre informatif uniquement et ne sont pas appliquées. Les clés étrangères doivent référencer une clé primaire dans une autre table.

Vous pouvez déclarer des clés primaires et des clés étrangères dans le cadre de la clause de spécification de table lors de la création d’une table. Cette clause n’est pas autorisée durant les instructions CTAS. Vous pouvez également ajouter des contraintes à des tables existantes.

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);

Vous pouvez interroger information_schema ou utiliser DESCRIBE pour obtenir des détails sur la façon dont les contraintes sont appliquées dans un catalogue donné.

Consultez l'article :