Einschränkungen für Azure Databricks

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 zum Ablegen oder Hinzufügen von NOT NULL Einschränkungen den ALTER TABLE ... ALTER COLUMN Befehl:

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

ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m 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 CHECK kann 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

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

ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m 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.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

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, da NULL Werte 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 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);
CREATE TABLE 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

So fügen Sie vorhandenen Tabellen Einschränkungen hinzu:

ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;
ALTER TABLE U ADD CONSTRAINT u_uq_email UNIQUE(email);

Weitere Ressourcen