ADD CONSTRAINT-Klausel
Gilt für: Databricks SQL Databricks Runtime
Fügt einer vorhandenen Delta Lake-Tabelle einen informativen Primärschlüssel, informativen Fremdschlüssel oder eine erzwungene CHECK-Einschränkung hinzu.
Syntax
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_table [ ( 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 }
Zum Gewährleisten der Kompatibilität mit nicht standardmäßigen SQL-Dialekten können Sie ENABLE NOVALIDATE
anstelle von NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
angeben.
Parameter
check_constraint
Definiert eine CHECK-Einschränkung für eine Delta Lake-Tabelle.
CONSTRAINT
nameGibt einen Namen für die Einschränkung an. Der Name muss innerhalb der Tabelle eindeutig sein. Wenn kein Name angegeben wird, generiert Azure Databricks einen Namen.
CHECK (
condition)
condition
muss ein deterministischer Ausdruck sein, derBOOLEAN
zurückgibt.condition
kann aus Literalen, Spaltenbezeichnern innerhalb der Tabelle und deterministischen, integrierten SQL-Funktionen oder -Operatoren bestehen, mit Ausnahme von:- Aggregatfunktionen
- Analysefensterfunktionen
- Fensterrangfunktionen
- Tabellenwertgenerator-Funktionen
Darüber hinaus darf
condition
keine Unterabfrage enthalten.Damit eine
CHECK
-Einschränkung in Azure Databricks erfüllt ist, muss sie alstrue
ausgewertet werden.Delta Lake überprüft die Gültigkeit der CHECK-Einschränkung sowohl für neue als auch für vorhandene Daten. Wenn eine vorhandene Zeile gegen die Einschränkung verstößt, wird ein Fehler ausgelöst.
key_constraint
Wichtig
Dieses Feature befindet sich in der Public Preview.
Gilt für: Databricks SQL Databricks Runtime 11.3 LTS und höher
Definiert eine informative Primärschlüssel- oder informative Fremdschlüsseleinschränkung für eine Delta Lake-Tabelle.
CONSTRAINT
nameGibt optional einen Namen für die Einschränkung an. Der Name muss innerhalb des Schemas eindeutig sein. Wenn kein Name angegeben wird, generiert Azure Databricks einen Namen.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Gilt für: Nur Unity Catalog
Fügt der Delta Lake-Tabelle eine Primärschlüsseleinschränkung hinzu. Eine Tabelle kann nur einen Primärschlüssel aufweisen.
Primärschlüsseleinschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.-
Eine Spalte der Betrefftabelle, die als
NOT NULL
definiert ist. Spaltennamen dürfen nicht wiederholt werden. TIMESERIES
Gilt für: Databricks SQL Databricks Runtime 13.3 LTS und höher
Bezeichnet optional die Komponente für Primärschlüsselspalten als Darstellung einer Zeitreihe.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Gilt für: Nur Unity Catalog
Fügt der Delta Lake-Tabelle eine Fremdschlüsseleinschränkung (referenzielle Integrität) hinzu.
Fremdschlüsseleinschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.-
Eine Spalte der Betrefftabelle. Spaltennamen dürfen nicht wiederholt werden. Der Datentyp jeder Spalte muss mit dem Typ der entsprechenden
parent_column
übereinstimmen. Die Anzahl von Spalten muss der Anzahl vonparent_columns
s entsprechen. Zwei Fremdschlüssel können nicht über einen identischen Satz von Fremdschlüsselspalten verfügen. -
Gibt die Tabelle an, auf die sich der Fremdschlüssel bezieht. Die Tabelle muss über eine definierte
PRIMARY KEY
-Einschränkung verfügen, und Sie müssen dieSELECT
-Berechtigung für die Tabelle haben. -
Eine Spalte in der übergeordneten Tabelle, die Teil des Primärschlüssels ist. Alle Primärschlüsselspalten der übergeordneten Tabelle müssen aufgelistet werden.
Wenn übergeordnete Spalten nicht aufgeführt sind, wird davon ausgegangen, dass sie in der Reihenfolge vorliegen, die in der
PRIMARY KEY
-Definition angegeben ist.
Fremdschlüsseleinschränkungen, die sich nur in der Permutation der Fremdschlüsselspalten unterscheiden, sind nicht zulässig.
-
constraint_option
Listet die Eigenschaften der Einschränkungen auf. Alle Eigenschaften sind optional, werden jedoch standardmäßig impliziert. Jede Eigenschaft kann höchstens einmal angegeben werden.
NOT ENFORCED
Azure Databricks führt keine Aktion aus, um dies für vorhandene oder neue Zeilen zu erzwingen.
DEFERRABLE
Die Erzwingung von Einschränkungen kann verzögert werden.
INITIALLY DEFERRED
Die Erzwingung von Einschränkungen wird verzögert.
NORELY
oderRELY
Gilt für: Databricks SQL Databricks Runtime ab Version 14.2 und darüber für
PRIMARY KEY
-EinschränkungenGilt für: Databricks Runtime 15.4 und höher für
FOREIGN KEY
-EinschränkungenBei
RELY
verletzt Azure Databricks möglicherweise die Einschränkung zum Umschreiben von Abfragen. Es liegt in der Benutzerverantwortung sicherzustellen, dass die Einschränkung erfüllt ist. Die Verwendung einer Einschränkung, die nicht erfüllt ist, kann zu fehlerhaften Abfrageergebnissen führen.Der Standardwert ist
NORELY
.
foreign_key_option
Listet die spezifischen Eigenschaften von Fremdschlüsseleinschränkungen auf. Alle Eigenschaften sind optional, werden jedoch standardmäßig impliziert. Jede Eigenschaft kann höchstens einmal angegeben werden.
MATCH FULL
Damit die Einschränkung als „true“ gilt, müssen alle Spaltenwerte
NOT NULL
sein.ON UPDATE NO ACTION
Wenn der übergeordnete
PRIMARY KEY
aktualisiert wird, führt Azure Databricks keine Aktion aus, um die Aktualisierung einzuschränken oder den Fremdschlüssel zu aktualisieren.ON DELETE NO ACTION
Wenn die übergeordnete Zeile gelöscht wird, führt Azure Databricks keine Aktion aus, um die Aktion einzuschränken, den Fremdschlüssel zu aktualisieren oder die abhängige Zeile zu löschen.
Wichtig
Azure Databricks erzwingt keine Primärschlüssel- oder Fremdschlüsseleinschränkungen. Überprüfen und bestätigen Sie Schlüsseleinschränkungen, bevor Sie einen Primär- oder Fremdschlüssel hinzufügen. Dies kann im Rahmen Ihres Erfassungsprozesses geschehen, oder Sie können Überprüfungen für Ihre Daten ausführen.
Beispiele
-- 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);