Ograniczenia usługi Azure Databricks

Usługa Azure Databricks obsługuje standardowe klauzule zarządzania ograniczeniem SQL. Ograniczenia należą do dwóch kategorii:

  • Wymuszone ograniczenia zapewniają, że jakość i integralność danych dodanych do tabeli są automatycznie weryfikowane.
  • Informacyjny klucz podstawowy i ograniczenia klucza obcego kodują relacje między polami w tabelach i nie są wymuszane.

Wszystkie ograniczenia usługi Azure Databricks wymagają usługi Delta Lake.

Funkcja Delta Live Tables ma podobną koncepcję znaną jako oczekiwania. Zobacz Zarządzanie jakością danych za pomocą tabel delta live.

Wymuszone ograniczenia dotyczące usługi Azure Databricks

Gdy ograniczenie zostanie naruszone, transakcja kończy się niepowodzeniem z powodu błędu. Obsługiwane są dwa typy ograniczeń:

  • NOT NULL: wskazuje, że wartości w określonych kolumnach nie mogą mieć wartości null.
  • CHECK: wskazuje, że określone wyrażenie logiczne musi być prawdziwe dla każdego wiersza wejściowego.

Ważne

Dodanie ograniczenia powoduje automatyczne uaktualnienie wersji protokołu modułu zapisywania tabel, jeśli poprzednia wersja składnika zapisywania była mniejsza niż 3. Zobacz How does Azure Databricks manage Delta Lake feature compatibility? (Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?), aby zrozumieć przechowywanie wersji protokołu table protocol i co to znaczy uaktualnić wersję protokołu.

NOT NULL Ustawianie ograniczenia w usłudze Azure Databricks

Podczas tworzenia tabeli należy określić NOT NULL ograniczenia w schemacie. Należy usunąć lub dodać NOT NULL ograniczenia przy użyciu ALTER TABLE ALTER COLUMN polecenia .

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;

Przed dodaniem NOT NULL ograniczenia do tabeli usługa Azure Databricks sprawdza, czy wszystkie istniejące wiersze spełniają ograniczenie.

Jeśli określisz NOT NULL ograniczenie dla kolumny zagnieżdżonej w obrębie struktury, struktura nadrzędna również nie może mieć wartości null. Kolumny zagnieżdżone w obrębie tablicy lub typów map nie akceptują NOT NULL ograniczeń.

Zobacz CREATE TABLE [USING] i ALTER TABLE ALTER COLUMN.

CHECK Ustawianie ograniczenia w usłudze Azure Databricks

Ograniczenia są zarządzane CHECK przy użyciu ALTER TABLE ADD CONSTRAINT poleceń i ALTER TABLE DROP CONSTRAINT . ALTER TABLE ADD CONSTRAINT Sprawdza, czy wszystkie istniejące wiersze spełniają ograniczenie przed dodaniem go do tabeli.

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;

Zobacz ALTER TABLE ADD CONSTRAINT (ALTER TABLE ADD CONSTRAINT) i ALTER TABLE DROP CONSTRAINT (ALTER TABLE ADD CONSTRAINT ) i ALTER TABLE DROP CONSTRAINT (ALTER TABLE DROP CONSTRAINT).

CHECK ograniczenia są widoczne jako właściwości tabeli w danych wyjściowych DESCRIBE DETAIL poleceń i SHOW TBLPROPERTIES .

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Deklarowanie relacji klucza podstawowego i klucza obcego

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Uwaga

  • Ograniczenia klucza podstawowego i klucza obcego są dostępne w środowisku Databricks Runtime 11.3 LTS i nowszym.
  • Ograniczenia klucza podstawowego i klucza obcego wymagają wykazu aparatu Unity i usługi Delta Lake.

Relacje klucza podstawowego i klucza obcego można używać w polach w tabelach wykazu aparatu Unity. Klucze podstawowe i obce są tylko informacyjne i nie są wymuszane. Klucze obce muszą odwoływać się do klucza podstawowego w innej tabeli.

Klucze podstawowe i klucze obce można zadeklarować jako część klauzuli specyfikacji tabeli podczas tworzenia tabeli. Ta klauzula nie jest dozwolona podczas wykonywania instrukcji CTAS. Możesz również dodać ograniczenia do istniejących tabel.

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

Możesz wykonać zapytanie information_schema lub użyć DESCRIBE polecenia , aby uzyskać szczegółowe informacje na temat sposobu stosowania ograniczeń w danym wykazie.

Zobacz: