Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Databricks podporuje standardní klauzule správy omezení SQL:
- Vynucená omezení před přidáním řádků do tabulky ověřují integritu dat.
- Informační omezení (primární klíč, cizí klíč a jedinečná omezení) definují relace mezi poli v tabulkách a nevynucuje se.
Všechna omezení v Azure Databricks vyžadují Delta Lake.
Související koncept v kanálech Lakeflow najdete v tématu Správa kvality dat s očekáváními kanálu.
Vynucená omezení
Když dojde k porušení omezení, transakce selže s chybou. Azure Databricks podporuje dva typy omezení:
-
NOT NULL: označuje, že hodnoty v konkrétních sloupcích nemohou mít hodnotu null. -
CHECK: označuje, že zadaný logický výraz musí být pravdivý pro každý vstupní řádek.
Note
Přidání omezení upgraduje zapisovací protokol tabulky, pokud je aktuální verze zapisovače menší než 3. To může mít vliv na kompatibilitu s externími klienty Delta Lake. Viz kompatibilita a protokoly funkcí Delta Lake.
NOT NULL omezení
Při vytváření tabulky zadejte NOT NULL omezení ve schématu. Pokud chcete vypustit nebo přidat NOT NULL omezení, použijte ALTER TABLE ... ALTER COLUMN příkaz:
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 ověří, že všechny existující řádky splňují omezení před přidáním omezení NOT NULL do tabulky.
Pokud zadáte omezení NOT NULL u sloupce vnořeného do struktury, nadřazená struktura nesmí být null. Sloupce vnořené do typů polí nebo mapování nepřijímají NOT NULL omezení.
Přečtěte si CREATE TABLE [USING] a ALTER TABLE ALTER COLUMN.
CHECK omezení
Správa CHECK omezení pomocí ALTER TABLE ADD CONSTRAINT příkazů a ALTER TABLE DROP CONSTRAINT příkazů
ALTER TABLE ADD CONSTRAINT Ověřuje, že všechny existující řádky splňují omezení před přidáním omezení do tabulky.
Následující omezení platí pro kontrolní omezení:
- Výraz
CHECKomezení může použít všechny funkce SQL ve Sparku, které vždy vrátí stejný výsledek při zadání stejných hodnot argumentů s výjimkou následujících typů funkcí:- Uživatelem definované funkce.
- Agregační funkce
- Okenní funkce.
- Funkce vracející více řádků
Přidání do existující tabulky
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;
Viz ALTER TABLE ADD CONSTRAINT a ALTER TABLE DROP CONSTRAINT.
Zobrazit vlastnosti tabulky kontrolního omezení
Pomocí příkazů DESCRIBE DETAIL a SHOW TBLPROPERTIES zobrazte omezení tabulky CHECK.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Odebrat kontrolní omezení
V prostředí Databricks Runtime 15.4 LTS a vyšší použijte příkaz DROP FEATURE k odebrání omezení kontroly z tabulky a snížení verze protokolu tabulky.
Viz Funkce odstranění tabulky Delta Lake a snížení verze protokolu tabulky.
Deklarace primárního klíče, cizího klíče a jedinečných omezení
Primární klíč, cizí klíč a jedinečná omezení jsou pouze informativní a nevynucují se. Můžou zlepšit výkon prostřednictvím optimalizací dotazů.
- Primární klíč a cizí klíč: k dispozici pro tabulky Unity Catalog a Delta Lake v Databricks Runtime 13.3 LTS a vyšší. Ve verzi GA v Databricks Runtime 15.2 a novějších. Cizí klíče musí odkazovat na primární klíč nebo jedinečné omezení v jiné tabulce.
-
Jedinečné: Dostupné ve verzi Public Preview pro tabulky Katalogu Unity a Delta Lake v Databricks SQL a Databricks Runtime 18.2 a vyšší. Tabulka může mít několik jedinečných omezení. Cizí klíče mohou odkazovat na jedinečný sloupec pomocí
REFERENCES parent_table(unique_col). Jedinečné sloupce můžou mít hodnotu null, protožeNULLhodnoty jsou považovány za odlišné od sebe.
Dotazujte se pomocí information_schema, použijte DESCRIBE TABLE EXTENDED nebo použijte SHOW CREATE TABLE k získání podrobností o tom, jak jsou omezení uplatňována v daném katalogu.
Přidat do nových tabulek
Deklarujte primární klíče, cizí klíče a jedinečná omezení jako součást klauzule specifikace tabulky během vytváření tabulky:
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);
CREATE TABLE U(id INTEGER NOT NULL, email STRING NOT NULL,
CONSTRAINT u_uq_email UNIQUE(email));
Příkazy CTAS nepodporují klauzuli omezení.
Přidání do existujících tabulek
Přidání omezení do existujících tabulek:
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;
ALTER TABLE U ADD CONSTRAINT u_uq_email UNIQUE(email);