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.
  • Primär- und Fremdschlüsseleinschrä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 Spark Declarative Pipelines finden Sie unter Verwalten der Datenqualität mit Pipelineerwartungen.

Erzwungene Einschränkungen für Azure Databricks

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.

Wichtig

Wenn Sie eine Einschränkung hinzufügen, aktualisiert Azure Databricks automatisch die Tabellenschreiberprotokollversion, wenn die vorherige Writer-Version kleiner als 3 war. Lesen Sie über die Kompatibilität von Delta Lake-Features und -Protokollen, um die Versionssteuerung von Tabellen zu verstehen und was es bedeutet, die Protokollversion zu aktualisieren.

Festlegen einer NOT NULL-Einschränkung in Azure Databricks

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.

Festlegen einer CHECK-Einschränkung in Azure Databricks

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.

Überprüfen von Einschränkungstabelleneigenschaften anzeigen

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üssel- und Fremdschlüsselbeziehungen

Primärschlüssel- und Fremdschlüsseleinschränkungen sind für Unity Catalog- und Delta Lake-Tabellen in Databricks Runtime 13.3 LTS und höher verfügbar und sind GA in Databricks Runtime 15.2 und höher.

Primärschlüssel und Fremdschlüssel sind nur Informationen und werden nicht erzwungen. Fremdschlüssel müssen auf einen Primärschlüssel in einer anderen Tabelle verweisen. Informationsschlüsseleinschränkungen können die Leistung mit Abfrageoptimierungen verbessern.

Abfrage der information_schema oder Verwendung von DESCRIBE , um Details darüber zu erhalten, wie Einschränkungen in einem bestimmten Katalog angewendet werden.

Zu neuen Tabellen hinzufügen

Deklarieren Sie Primärschlüssel und Fremdschlüssel 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);

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;