ADD CONSTRAINT klauzula
Dotyczy: Databricks SQL
Databricks Runtime
Dodaje informacyjny klucz podstawowy, informacyjny klucz obcy lub wymuszone ograniczenie sprawdzania do istniejącej tabeli usługi Delta Lake.
Składnia
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_table [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Aby uzyskać zgodność z niestandardowymi dialektami SQL, można określić ENABLE NOVALIDATE
zamiast NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parametry
check_constraint
Definiuje ograniczenie sprawdzania dla tabeli usługi Delta Lake.
CONSTRAINT
nameOkreśla nazwę ograniczenia. Nazwa musi być unikatowa w tabeli. Jeśli nie podano nazwy dla ograniczenia
FOREIGN KEY
lubPRIMARY KEY
, usługa Azure Databricks wygeneruje jedną nazwę.CHECK (
warunek)
condition
musi być wyrażeniem deterministycznym zwracającymBOOLEAN
wartość .condition
Może składać się z literałów, identyfikatorów kolumn w tabeli oraz deterministycznych, wbudowanych funkcji LUB operatorów SQL, z wyjątkiem:- Agregujących
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
Ponadto
condition
nie może zawierać żadnego podzapytania.CHECK
Aby ograniczenie było zadowalające w usłudze Azure Databricks, musi zostać obliczone natrue
wartość .Usługa Delta Lake weryfikuje ważność ograniczenia sprawdzania zarówno względem nowych, jak i istniejących danych. Jeśli jakikolwiek istniejący wiersz narusza ograniczenie, zostanie zgłoszony błąd.
key_constraint
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Dotyczy:
Databricks SQL
Databricks Runtime 11.3 LTS i nowsze
Definiuje informacyjny klucz podstawowy lub informacyjne ograniczenie klucza obcego dla tabeli usługi Delta Lake.
CONSTRAINT
nameOpcjonalnie określa nazwę ograniczenia. Nazwa musi być unikatowa w schemacie. Jeśli żadna nazwa nie zostanie podana, usługa Azure Databricks wygeneruje jedną nazwę.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Dotyczy:
tylko wykaz aparatu Unity
Dodaje ograniczenie klucza podstawowego do tabeli usługi Delta Lake. Tabela może mieć co najwyżej jeden klucz podstawowy.
Ograniczenia klucza podstawowego nie są obsługiwane w przypadku tabel w wykazie
hive_metastore
.-
Kolumna tabeli podmiotu zdefiniowana jako
NOT NULL
. Nazwy kolumn nie mogą być powtarzane. TIMESERIES
Dotyczy:
Databricks SQL
Databricks Runtime 13.3 LTS i nowsze
Opcjonalnie oznacza składnik kolumny klucza podstawowego jako reprezentujący czasowniki.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Dotyczy:
tylko wykaz aparatu Unity
Dodaje ograniczenie klucza obcego (integralność referencyjna) do tabeli usługi Delta Lake.
Ograniczenia klucza obcego nie są obsługiwane w przypadku tabel w wykazie
hive_metastore
.-
Kolumna tabeli tematu. Nazwy kolumn nie mogą być powtarzane. Typ danych każdej kolumny musi być zgodny z typem pasującego
parent_column
elementu . Liczba kolumn musi być zgodna z liczbą .parent_columns
Dwa klucze obce nie mogą współdzielić identycznego zestawu kolumn kluczy obcych. -
Określa tabelę, do których odwołuje się klucz obcy. Tabela musi mieć zdefiniowane
PRIMARY KEY
ograniczenie i musi miećSELECT
uprawnienia do tabeli. -
Kolumna w tabeli nadrzędnej, która jest częścią klucza podstawowego. Wszystkie kolumny klucza podstawowego tabeli nadrzędnej muszą być wymienione.
Jeśli kolumny nadrzędne nie są wymienione na liście, mają być określone w kolejności podanej
PRIMARY KEY
w definicji.
Ograniczenia klucza obcego, które różnią się tylko permutacją kolumn klucza obcego, są niedozwolone.
-
constraint_option
Wyświetla listę właściwości ograniczeń. Wszystkie właściwości są opcjonalne, ale domyślnie implikowane. Każda właściwość może być określona co najwyżej raz.
NOT ENFORCED
Usługa Azure Databricks nie podejmuje żadnych działań w celu wymuszenia jej dla istniejących lub nowych wierszy.
DEFERRABLE
Wymuszanie ograniczenia można odroczyć.
INITIALLY DEFERRED
Wymuszanie ograniczeń jest odroczone.
NORELY
lubRELY
Dotyczy:
Databricks SQL
Databricks Runtime 14.2 i nowsze w przypadku
PRIMARY KEY
ograniczeńDotyczy:
Databricks SQL
Databricks Runtime 15.4 lub nowsze dla ograniczeń
FOREIGN KEY
Jeśli
RELY
usługa Azure Databricks może wykorzystać ograniczenie do ponownego zapisywania zapytań. Użytkownik ponosi odpowiedzialność za zapewnienie, że ograniczenie jest spełnione. Poleganie na ograniczeniu, które nie jest spełnione, może prowadzić do nieprawidłowych wyników zapytania.Wartość domyślna to
NORELY
.
foreign_key_option
Wyświetla listę właściwości specyficznych dla ograniczeń klucza obcego. Wszystkie właściwości są opcjonalne, ale domyślnie implikowane. Każda właściwość może być określona co najwyżej raz.
MATCH FULL
Aby ograniczenie było uznawane za prawdziwe, wszystkie wartości kolumn muszą mieć wartość
NOT NULL
.ON UPDATE NO ACTION
Jeśli element nadrzędny
PRIMARY KEY
jest aktualizowany w usłudze Azure Databricks, nie podejmuje żadnych działań w celu ograniczenia aktualizacji lub zaktualizowania klucza obcego.ON DELETE NO ACTION
Jeśli wiersz nadrzędny zostanie usunięty w usłudze Azure Databricks, nie podejmuje żadnych działań w celu ograniczenia akcji, zaktualizowania klucza obcego lub usunięcia wiersza zależnego.
Ważne
Usługa Azure Databricks nie wymusza ograniczeń klucza podstawowego ani klucza obcego. Przed dodaniem klucza podstawowego lub obcego potwierdź ograniczenia klucza. Proces pozyskiwania może zapewnić taką pewność lub można uruchomić kontrole względem danych.
Przykłady
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);