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.
Azure Databricks unterstützt standardmäßige SQL-Einschränkungsverwaltungsklauseln:
- Erzwungene Einschränkungen überprüfen die Datenintegrität, bevor Zeilen zu einer Tabelle hinzugefügt werden.
- Informationseinschränkungen (Primärschlüssel, Fremdschlüssel und eindeutige Einschränkungen) definieren Beziehungen zwischen Feldern in Tabellen und werden nicht erzwungen.
Alle Einschränkungen für Azure Databricks erfordern Delta Lake.
Ein verwandtes Konzept in Lakeflow-Pipelines finden Sie unter "Verwalten der Datenqualität mit Pipelineerwartungen".
Erzwungene Einschränkungen
Wenn eine Einschränkung verletzt wird, schlägt die Transaktion mit einem Fehler fehl. Azure Databricks unterstützt zwei Arten von Einschränkungen:
-
NOT NULL: Gibt an, dass Werte in bestimmten Spalten nicht NULL sein dürfen -
CHECK: gibt an, dass ein bestimmter boolescher Ausdruck für jede Eingabezeile true sein muss.
Note
Durch Hinzufügen einer Einschränkung wird das Table Writer-Protokoll aktualisiert, wenn die aktuelle Writer-Version kleiner als 3 ist. Dies kann sich auf die Kompatibilität mit externen Delta Lake-Clients auswirken. Siehe Delta Lake Featurekompatibilität und Protokolle.
NOT NULL Einschränkung
Wenn Sie eine Tabelle erstellen, geben Sie Einschränkungen im Schema an NOT NULL . Verwenden Sie den Befehl ALTER TABLE ... ALTER COLUMN, um NOT NULL Einschränkungen nach der Erstellung zu entfernen oder hinzuzufügen. Das folgende Beispiel erstellt eine people_demo Tabelle, die der Rest dieses Abschnitts wiederverwendet:
CREATE OR REPLACE TABLE main.default.people_demo (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE main.default.people_demo ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE main.default.people_demo ALTER COLUMN ssn SET NOT NULL;
Azure Databricks überprüft, ob alle vorhandenen Zeilen die Einschränkung erfüllen, bevor sie einer Tabelle eine NOT NULL-Einschränkung hinzufügen.
Wenn Sie eine NOT NULL-Einschränkung für eine Spalte angeben, die in einer Struktur verschachtelt ist, darf die übergeordnete Struktur ebenfalls nicht null sein. Spalten, die in Array- oder Map-Typen geschachtelt sind, akzeptieren keine NOT NULL Einschränkungen.
Siehe CREATE TABLE [USING] und ALTER TABLE ALTER COLUMN.
CHECK Einschränkung
Verwalten Sie CHECK Einschränkungen mit den ALTER TABLE ADD CONSTRAINT Und ALTER TABLE DROP CONSTRAINT Befehlen.
ALTER TABLE ADD CONSTRAINT Überprüft, ob alle vorhandenen Zeilen die Einschränkung erfüllen, bevor sie der Tabelle hinzugefügt wird.
Die folgenden Einschränkungen gelten für die Überprüfung von Einschränkungen:
- Ein Einschränkungsausdruck
CHECKkann alle SQL-Funktionen in Spark verwenden, die immer dasselbe Ergebnis zurückgeben, wenn die gleichen Argumentwerte angegeben werden, mit Ausnahme der folgenden Funktionstypen:- Benutzerdefinierte Funktionen.
- Aggregatfunktionen.
- Fensterfunktionen.
- Funktionen, die mehrere Zeilen zurückgeben.
Hinzufügen zu einer vorhandenen Tabelle
Das folgende Beispiel fügt der im vorherigen Abschnitt erstellten people_demo-Tabelle eine CHECK-Einschränkung hinzu und löscht sie anschließend:
ALTER TABLE main.default.people_demo ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE main.default.people_demo DROP CONSTRAINT dateWithinRange;
Siehe ALTER TABLE ADD CONSTRAINT und ALTER TABLE DROP CONSTRAINT.
Anzeigen von Tabelleneigenschaften für CHECK-Einschränkungen
Verwenden Sie die Befehle DESCRIBE DETAIL und SHOW TBLPROPERTIES, um die Einschränkungen einer Tabelle CHECK anzuzeigen. Das folgende Beispiel fügt eine Nebenbedingung zu people_demohinzu und zeigt sie dann an:
ALTER TABLE main.default.people_demo ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL main.default.people_demo;
SHOW TBLPROPERTIES main.default.people_demo;
Check-Einschränkungen entfernen
Verwenden Sie in Databricks Runtime 15.4 LTS und höher den DROP FEATURE Befehl, um Check-Einschränkungen aus einer Tabelle zu entfernen und das Tabellenprotokoll nach unten zu aktualisieren.
Weitere Informationen finden Sie unter Löschen eines Delta Lake-Tabellenfeatures und Herabstufen des Tabellenprotokolls.
Deklarieren von Primärschlüsseln, Fremdschlüsseln und eindeutigen Einschränkungen
Primärschlüssel, Fremdschlüssel und eindeutige Einschränkungen sind nur Informationen und werden nicht erzwungen. Sie können die Leistung durch Abfrageoptimierungen verbessern.
- Primärschlüssel und Fremdschlüssel: Verfügbar für Unity-Katalog- und Delta Lake-Tabellen in Databricks Runtime 13.3 LTS und höher. GA in Databricks Runtime 15.2 und höher. Fremdschlüssel müssen auf einen Primärschlüssel oder eine eindeutige Einschränkung in einer anderen Tabelle verweisen.
-
Einzigartig: In public Preview für Unity-Katalog- und Delta Lake-Tabellen in Databricks SQL und Databricks Runtime 18.2 und höher verfügbar. Eine Tabelle kann mehrere eindeutige Einschränkungen aufweisen. Fremdschlüssel können mit
REFERENCES parent_table(unique_col)auf eine eindeutige Spalte verweisen. Eindeutige Spalten können nullfähig sein, daNULLWerte voneinander getrennt behandelt werden.
Fragen Sie den information_schema ab, verwenden Sie DESCRIBE TABLE EXTENDED oder SHOW CREATE TABLE, um Details darüber zu erhalten, wie Einschränkungen innerhalb eines bestimmten Katalogs angewendet werden.
Zu neuen Tabellen hinzufügen
Deklarieren Sie Primärschlüssel, Fremdschlüssel und eindeutige Einschränkungen als Teil der Tabellenspezifikationsklausel während der Tabellenerstellung:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL,
CONSTRAINT u_uq_email UNIQUE(email));
CTAS-Anweisungen unterstützen diese Einschränkungsklausel nicht.
Zu vorhandenen Tabellen hinzufügen
Alternativ fügen Sie dieselben Einschränkungen zu bereits vorhandenen Tabellen hinzu. Dieser Ansatz erreicht dasselbe Ergebnis wie der vorherige Abschnitt. Das folgende Beispiel erstellt S, U und T zunächst ohne Nebenbedingungen neu und fügt dann jede Nebenbedingung mithilfe von ALTER TABLE ADD CONSTRAINT hinzu. Füge einen Primärschlüssel vor den Fremdschlüssel hinzu, der darauf verweist:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL);
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL, fk1 INTEGER, fk2 INTEGER);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL);
ALTER TABLE main.default.T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE main.default.S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T;
ALTER TABLE main.default.U ADD CONSTRAINT u_uq_email UNIQUE(email);