Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime
Fügt einer vorhandenen Delta Lake-Tabelle einen informationsalen Primärschlüssel , einen informationsalen Fremdschlüssel, eine eindeutige Einschränkung zur Information oder eine erzwungene Prüfeinschränkung hinzu.
Syntax
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition )
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
UNIQUE ( key_column [, ...] ) [ 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 }
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_constraintDefiniert eine Check-Constraint für eine Relation.
CONSTRAINTNameGibt einen Namen für die Einschränkung an. Der Name muss innerhalb der Beziehung eindeutig sein.
CHECK (Bedingung)Die
DEFAULT COLLATIONBeziehung mussUTF8_BINARYzu dem Zeitpunkt sein, zu dem die Einschränkung hinzugefügt wird.conditionmuss ein deterministischer Ausdruck sein, derBOOLEANzurückgibt.conditionkann aus Literalen, Spaltenbezeichnern innerhalb der Beziehung und deterministischen, integrierten SQL-Funktionen oder Operatoren bestehen, außer:- Aggregatfunktionen
- Analysefensterfunktionen
- Rangfolgefensterfunktionen
- Tabellenwertgenerator-Funktionen
-
STRING-Spalten mit anderen Sortierungen alsUTF8_BINARY
Darüber hinaus darf
conditionkeine Unterabfrage enthalten.Damit eine
CHECK-Einschränkung in Azure Databricks erfüllt ist, muss sie alstrueausgewertet 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_constraintWichtig
Dieses Feature befindet sich in der Public Preview.
Gilt für:
Databricks SQL
Databricks Runtime 11.3 LTS und höhereDefiniert einen informationsbasierten Primärschlüssel, informationsbasierten Fremdschlüssel oder eine eindeutige Informationseinschränkung für eine Beziehung. Informationsschlüsseleinschränkungen werden nicht erzwungen, können jedoch die Leistung verbessern, indem Abfrageoptimierungen unterstützt werden.
CONSTRAINTNameGibt 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 CatalogFügt der Relation eine Primärschlüsselbeschränkung hinzu. Eine Beziehung kann höchstens einen Primärschlüssel aufweisen.
Primärschlüsseleinschränkungen werden für Beziehungen im
hive_metastoreKatalog nicht unterstützt.-
Eine Spalte der Betreffbeziehung, die als
NOT NULLdefiniert ist. Spaltennamen dürfen nicht wiederholt werden. TIMESERIESGilt für:
Databricks SQL
Databricks Runtime 13.3 LTS und höherBezeichnet optional die Komponente für Primärschlüsselspalten als Darstellung einer Zeitreihe.
UNIQUE ( key_column [, ...] ) [ constraint_option [...] ]Gilt für:
Databricks SQL
Databricks Runtime 18.2 and above
Unity Catalog onlyFügt der Beziehung eine eindeutige Einschränkung hinzu. Eine Beziehung kann mehrere eindeutige Einschränkungen aufweisen.
Spalten in einer
UNIQUEEinschränkung können nullwertebar sein.NULLWerte inUNIQUESpalten werden voneinander getrennt behandelt, sodass doppelteNULLWerte nicht gegen die Semantik einerUNIQUEEinschränkung verstoßen.Eindeutige Einschränkungen werden für Beziehungen im
hive_metastoreKatalog nicht unterstützt.-
Eine Spalte der Subjektbeziehung. Spaltennamen dürfen nicht wiederholt werden.
-
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_optionGilt für:
Nur Unity CatalogFügt der Relation eine Fremdschlüsseleinschränkung (referenzielle Integrität) hinzu.
Fremdschlüsseleinschränkungen werden für Beziehungen im
hive_metastoreKatalog nicht unterstützt.-
Eine Spalte der Subjektbeziehung. 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_columnss entsprechen. Zwei Fremdschlüssel können nicht über einen identischen Satz von Fremdschlüsselspalten verfügen. -
Gibt die Beziehung an, auf die sich der Fremdschlüssel bezieht. Die Beziehung muss über eine definierte
PRIMARY KEYEinschränkung verfügen oder, in Databricks Runtime 18.2 und höher, eine definierteUNIQUEEinschränkung, und Sie müssen über dieSELECTBerechtigung für die Beziehung verfügen. -
Eine Spalte in der übergeordneten Beziehung, die Teil des Primärschlüssels ist oder, in Databricks Runtime 18.2 und höher, Teil einer eindeutigen Einschränkung. Alle Primärschlüsselspalten oder eindeutige Einschränkungsspalten der übergeordneten Beziehung 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_optionListet die Eigenschaften der Einschränkungen auf. Alle Eigenschaften sind optional, werden jedoch standardmäßig impliziert. Jede Eigenschaft kann höchstens einmal angegeben werden.
NOT ENFORCEDAzure Databricks führt keine Aktion aus, um dies für vorhandene oder neue Zeilen zu erzwingen.
DEFERRABLEDie Erzwingung von Einschränkungen kann verzögert werden.
INITIALLY DEFERREDDie Erzwingung von Einschränkungen wird verzögert.
NORELYoderRELYGilt für:
Databricks SQL
Databricks Runtime, Version 14.2 und höher für PRIMARY KEY-EinschränkungenGilt für:
Databricks SQL
Databricks Runtime, Version 15.4 und höher für FOREIGN KEY-EinschränkungenGilt für:
Databricks SQL
Databricks Runtime 18.2 and above for UNIQUEconstraintsBei
RELYverletzt Azure Databricks möglicherweise die Einschränkung zum Umschreiben von Abfragen. Es liegt in der Verantwortung des Benutzers, 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_optionListet 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 FULLDamit die Einschränkung als „true“ gilt, müssen alle Spaltenwerte
NOT NULLsein.ON UPDATE NO ACTIONWenn der übergeordnete
PRIMARY KEYaktualisiert wird, führt Azure Databricks keine Aktion aus, um die Aktualisierung einzuschränken oder den Fremdschlüssel zu aktualisieren.ON DELETE NO ACTIONWenn 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-, Fremdschlüssel- oder eindeutigen Einschränkungen. Bestätigen Sie die Schlüsseleinschränkungen, bevor Sie einen Primärschlüssel, einen Fremdschlüssel oder eine eindeutige Einschränkung hinzufügen. Ihr Erfassungsprozess könnte diese Sicherheit bieten, oder Sie können Überprüfungen an Ihren Daten durchfü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);
-- Add a unique constraint
> CREATE TABLE person_emails(first_name STRING NOT NULL, last_name STRING NOT NULL, email STRING);
> ALTER TABLE person_emails ADD CONSTRAINT person_emails_uq UNIQUE(email);