Begränsningar för Azure Databricks

Azure Databricks stöder standardsatser för SQL-begränsningshantering:

  • Framtvingade begränsningar verifierar dataintegriteten innan du lägger till rader i en tabell.
  • Begränsningar för primär informationsnyckel och sekundärnyckel definierar relationer mellan fält i tabeller och tillämpas inte.

Alla begränsningar för Azure Databricks kräver Delta Lake.

Ett relaterat begrepp i Lakeflow Spark Deklarativa pipelines finns i Hantera datakvalitet med pipelineförväntningar.

Tvingade begränsningar för Azure Databricks

När en begränsning överträds misslyckas transaktionen med ett fel. Azure Databricks stöder två typer av begränsningar:

  • NOT NULL: anger att värden i specifika kolumner inte får vara null.
  • CHECK: anger att ett angivet booleskt uttryck måste vara sant för varje indatarad.

Viktigt!

När du lägger till en begränsning uppgraderar Azure Databricks automatiskt tabellskrivarens protokollversion om den tidigare skrivversionen var mindre än 3. Se Delta Lake-funktionskompatibilitet och protokoll för att förstå versionshantering av tabellprotokoll och vad det innebär att uppgradera protokollversionen.

Ange en NOT NULL begränsning i Azure Databricks

När du skapar en tabell anger du NOT NULL begränsningar i schemat. Om du vill släppa eller lägga till NOT NULL begränsningar använder du ALTER TABLE ... ALTER COLUMN kommandot:

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 verifierar att alla befintliga rader uppfyller villkoret innan du lägger till en NOT NULL-begränsning i en tabell.

Om du anger ett NOT NULL villkor för en kolumn som är kapslad inom en struct får den överordnade structen inte heller vara null. Kolumner kapslade i matris- eller karttyper accepterar NOT NULL inte begränsningar.

Se CREATE TABLE [USING] och ALTER TABLE ALTER COLUMN.

Ange en CHECK begränsning i Azure Databricks

Hantera CHECK begränsningar med kommandona ALTER TABLE ADD CONSTRAINT och ALTER TABLE DROP CONSTRAINT . ALTER TABLE ADD CONSTRAINT verifierar att alla befintliga rader uppfyller villkoret innan du lägger till villkoret i tabellen.

Följande begränsningar gäller för kontrollbegränsningar:

  • Ett CHECK villkorsuttryck kan använda alla SQL-funktioner i Spark som alltid returnerar samma resultat när samma argumentvärden anges, förutom följande typer av funktioner:
    • Användardefinierade funktioner.
    • Mängdfunktioner.
    • Fönsterfunktioner.
    • Funktioner som returnerar flera rader.

Lägg till i en befintlig tabell

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;

Se ALTER TABLE ADD CONSTRAINT och ALTER TABLE DROP CONSTRAINT.

Visa egenskaper för kontrollbegränsningstabell

Använd kommandona DESCRIBE DETAIL och SHOW TBLPROPERTIES för att se en tabells CHECK begränsningar.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Ta bort kontrollbegränsningar

I Databricks Runtime 15.4 LTS och senare använder du DROP FEATURE kommandot för att ta bort kontrollbegränsningar från en tabell och nedgradera tabellprotokollet.

Se Ta bort en Delta Lake-tabellfunktion och nedgradera tabellprotokollet.

Deklarera primärnyckel och främmande nyckelrelationer

Begränsningar för primärnyckel och sekundärnyckel är tillgängliga för Unity Catalog- och Delta Lake-tabeller i Databricks Runtime 13.3 LTS och senare och är GA i Databricks Runtime 15.2 och senare.

Primära och externa nycklar är endast informationsnycklar och tillämpas inte. Främmande nycklar måste referera till en primärnyckel i en annan tabell. Informationsnyckelbegränsningar kan förbättra prestanda med frågeoptimeringar.

information_schema Fråga eller använd DESCRIBE för att få information om hur begränsningar tillämpas i en viss katalog.

Lägg till i nya tabeller

Deklarera primära nycklar och sekundärnycklar som en del av tabellspecifikationssatsen när tabellen skapas:

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-instruktioner stöder inte den här begränsningssatsen.

Lägg till i befintliga tabeller

Så här lägger du till begränsningar i befintliga tabeller:

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;