Einschränkungen für Azure Databricks

Azure Databricks unterstützt standardmäßige SQL-Einschränkungsverwaltungsklauseln. Einschränkungen fallen in zwei Kategorien:

  • Erzwungene Einschränkungen stellen sicher, dass die Qualität und Integrität von Daten, die einer Tabelle hinzugefügt werden, automatisch überprüft werden.
  • Informative Primärschlüssel- und Fremdschlüsseleinschränkungen codieren Beziehungen zwischen Feldern in Tabellen und werden nicht erzwungen.

Alle Einschränkungen für Azure Databricks erfordern Delta Lake.

Delta Live Tables hat ein ähnliches Konzept, das als Erwartungen bekannt ist. Siehe Verwalten der Datenqualität mit Delta Live Tables.

Erzwungene Einschränkungen für Azure Databricks

Wenn eine Einschränkung verletzt wird, schlägt die Transaktion mit einem Fehler fehl. Es werden zwei Arten von Einschränkungen unterstützt:

  • 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

Durch das Hinzufügen einer Einschränkung wird die Version des Table Writer-Protokolls automatisch aktualisiert, wenn die vorherige Writer-Version kleiner als 3 war. Siehe Tabellenprotokollversionsverwaltung, um die Tabellenprotokollversionsverwaltung zu verstehen und was es bedeutet, die Protokollversion zu aktualisieren.

Festlegen einer NOT NULL Einschränkung in Azure Databricks

Hinweis

  • SET NOT NULL ist in Databricks Runtime 7.4 und höheren Versionen verfügbar.

Sie geben NOT NULL Einschränkungen im Schema an, wenn Sie eine Tabelle erstellen. Sie können Einschränkungen mithilfe des NOT NULL Befehls ablegen oder hinzufügenALTER TABLE ALTER COLUMN.

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

ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;

Vor dem Hinzufügen einer NOT NULL-Einschränkung zu einer Tabelle überprüft Azure Databricks, ob alle vorhandenen Zeilen die Einschränkung erfüllen.

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 verschachtelt sind, akzeptieren keine NOT NULL-Einschränkungen.

Siehe CREATE TABLE [USING] und ALTER TABLE ALTER COLUMN.

Festlegen einer CHECK Einschränkung in Azure Databricks

Hinweis

  • Verfügbar in Databricks Runtime 7.4 und höheren Versionen
  • In Databricks Runtime 7.3 LTS können Sie in Tabellen mit definierten CHECK-Einschränkungen schreiben, jedoch keine CHECK-Einschränkungen erstellen.

Sie verwalten CHECK-Einschränkungen mithilfe der Befehle ALTER TABLE ADD CONSTRAINT und ALTER TABLE DROP CONSTRAINT. ALTER TABLE ADD CONSTRAINT überprüft, ob alle vorhandenen Zeilen die Einschränkung erfüllen, bevor sie der Tabelle hinzugefügt werden.

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

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.

CHECK-Einschränkungen werden als Tabelleneigenschaften in der Ausgabe der DESCRIBE DETAIL- und SHOW TBLPROPERTIES-Befehle angezeigt.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Deklarieren von Primärschlüssel- und Fremdschlüsselbeziehungen

Wichtig

Dieses Feature befindet sich in der Public Preview.

Hinweis

  • Primärschlüssel- und Fremdschlüsseleinschränkungen sind in Databricks Runtime 11,1 und höher verfügbar.
  • Primärschlüssel- und Fremdschlüsseleinschränkungen erfordern Unity Catalog und Delta Lake.

Sie können Primärschlüssel- und Fremdschlüsselbeziehungen für Felder in Unity Catalog-Tabellen verwenden. Primär- und Fremdschlüssel dienen nur zu Informationszwecken und werden nicht erzwungen. Fremdschlüssel müssen auf einen Primärschlüssel in einer anderen Tabelle verweisen.

Sie können während der Tabellenerstellung Primärschlüssel und Fremdschlüssel als Teil der Tabellenspezifikationsklausel deklarieren. Diese Klausel ist während CTAS-Anweisungen nicht zulässig. Sie können Einschränkungen auch zu bestehenden Tabellen hinzufügen.

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);

Sie können information_schema abfragen oder DESCRIBE verwenden, um Details darüber zu erhalten, wie Einschränkungen auf einen bestimmten Katalog angewendet werden.

Thema