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.
S’applique à :
Databricks SQL
Databricks Runtime
Ajoute une clé primaire informationnelle , une clé étrangère informationnelle ou une contrainte de vérification appliquée à une table Delta Lake existante.
Syntaxe
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition )
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_relation [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Pour la compatibilité avec les dialectes SQL non standard, vous pouvez spécifier ENABLE NOVALIDATE au lieu de NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.
Paramètres
check_constraintDéfinit une contrainte de vérification pour une relation.
CONSTRAINTnomSpécifie un nom pour la contrainte. Le nom doit être unique dans la relation.
CHECK (condition)La
DEFAULT COLLATIONrelation doit êtreUTF8_BINARYau moment où la contrainte est ajoutée.conditiondoit être une expression déterministe qui retourne unBOOLEAN.conditionpeut être composé de littéraux, d’identificateurs de colonne au sein de la relation et de fonctions SQL intégrées et déterministes, à l’exception de :- Fonctions d’agrégation
- Fonctions de fenêtre analytique
- Les fonctions de classement de fenêtre
- Fonctions du générateur de valeur de table
-
STRINGcolonnes avec classements autres queUTF8_BINARY
conditionNe doit pas non plus contenir de sous-requête.Pour qu’une contrainte de
CHECKsoit satisfaite dans Azure Databricks, elle doit avoir la valeurtrue.Delta Lake vérifie la validité de la contrainte de validation par rapport aux données nouvelles et existantes. Si une ligne existante enfreint la contrainte, une erreur est générée.
key_constraintImportant
Cette fonctionnalité est disponible en préversion publique.
S’applique à :
Databricks SQL
Databricks Runtime 11.3 LTS et ultérieurDéfinit une contrainte de clé primaire d’information ou de clé étrangère informationnelle pour une relation. Les contraintes de clé d’information ne sont pas appliquées, mais peuvent améliorer les performances en prenant en charge les optimisations des requêtes.
CONSTRAINTnom(Facultatif) Spécifie un nom pour la contrainte. Le nom doit être unique au sein du schéma. Si aucun nom n’est fourni, Azure Databricks en génère un.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]S’applique à :
Unity Catalog uniquementAjoute une contrainte de clé primaire à la relation. Une relation peut avoir au plus une clé primaire.
Les contraintes de clé primaire ne sont pas prises en charge pour les relations dans le catalogue
hive_metastore.-
Une colonne de la relation sujet définie en tant que
NOT NULL. Les noms de colonnes ne doivent pas être répétés. TIMESERIESS’applique à :
Databricks SQL
Databricks Runtime 13.3 LTS et ultérieurVous pouvez éventuellement étiqueter le composant de colonne de clé primaire comme représentant une série chronologique.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_optionS’applique à :
Unity Catalog uniquementAjoute une contrainte de clé étrangère (intégrité référentielle) à la relation.
Les contraintes de clé étrangère ne sont pas prises en charge pour les relations dans le
hive_metastorecatalogue.-
Colonne de la relation objet. Les noms de colonnes ne doivent pas être répétés. Le type de données du domaine doit correspondre au type de la
parent_columncorrespondante. Le nombre de colonnes doit correspondre au nombre deparent_columns. Deux clés étrangères ne peuvent pas partager un ensemble identique de colonnes de clé étrangère. -
Spécifie la relation à laquelle la clé étrangère fait référence. La relation doit avoir une contrainte définie
PRIMARY KEYet vous devez avoir leSELECTprivilège sur la relation. -
Une colonne dans la relation parente qui fait partie de la clé primaire. Toutes les colonnes clés primaires de la relation parente doivent être répertoriées.
Si des colonnes parentes ne sont pas listées, elles sont implicitement spécifiées dans l’ordre donné dans la définition
PRIMARY KEY.
Les contraintes de clé étrangère qui diffèrent seulement dans la permutation des colonnes de clé étrangère ne sont pas autorisées.
-
constraint_optionListe les propriétés des contraintes. Toutes les propriétés sont facultatives mais implicites par défaut. Chaque propriété ne peut être spécifiée qu’une seule fois.
NOT ENFORCEDAzure Databricks n’effectue aucune action pour l’appliquer pour les lignes existantes ou nouvelles.
DEFERRABLEL’application d’une contrainte peut être différée.
INITIALLY DEFERREDL’application d’une contrainte est différée.
NORELYouRELYS’applique à :
Databricks SQL
Databricks Runtime 14.2 et versions ultérieures pour les contraintes PRIMARY KEYS’applique à :
Databricks SQL
Databricks Runtime 15.4 et versions ultérieures pour FOREIGN KEYles contraintesSi
RELY, Azure Databricks peut exploiter la contrainte pour réécrire des requêtes. Il incombe à l’utilisateur de s’assurer que la contrainte est satisfaite. Si vous vous fiez à une contrainte qui n’est pas satisfaite, les résultats de la requête peuvent être erronés.Par défaut, il s’agit de
NORELY.
foreign_key_optionListe les propriétés spécifiques aux contraintes de clé étrangère. Toutes les propriétés sont facultatives mais implicites par défaut. Chaque propriété ne peut être spécifiée qu’une seule fois.
MATCH FULLPour que la contrainte soit considérée comme vraie, toutes les valeurs de colonne doivent être
NOT NULL.ON UPDATE NO ACTIONSi la
PRIMARY KEYprincipale est mise à jour, Azure Databricks n’effectue aucune action pour limiter la mise à jour ou pour mettre à jour la clé étrangère.ON DELETE NO ACTIONSi la ligne principale est supprimée, Azure Databricks n’effectue aucune action pour restreindre l’action, mettre à jour la clé étrangère ou supprimer la ligne dépendante.
Important
Azure Databricks n’applique pas de contraintes de clé primaire ou de clé étrangère. Vérifiez les contraintes de clé avant d’ajouter une clé primaire ou étrangère. Votre processus d’ingestion peut fournir une telle assurance ou bien vous pouvez effectuer des vérifications sur vos données.
Exemples
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);