klauzule ADD CONSTRAINT
Platí pro: Databricks SQL
Databricks Runtime
Přidá informační primární klíč, informační cizí klíč nebo vynucené omezení kontroly do existující tabulky Delta Lake.
Syntaxe
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 }
Kvůli kompatibilitě s nestandardními dialekty SQL můžete místo ENABLE NOVALIDATE
NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parametry
check_constraint
Definuje omezení kontroly pro tabulku Delta Lake.
CONSTRAINT
JménoUrčuje název omezení. Název musí být v tabulce jedinečný. Pokud pro omezení
FOREIGN KEY
neboPRIMARY KEY
není zadaný žádný název, Azure Databricks ho vygeneruje.CHECK (
podmínka)
condition
musí být deterministický výraz vracející znak .BOOLEAN
condition
se můžou skládat z literálů, identifikátorů sloupců v tabulce a deterministických integrovaných funkcí nebo operátorů SQL s výjimkou:- Agregační funkce
- Analytické okenní funkce
- Okna funkcí pro hodnocení
- Funkce generování tabulkových hodnot
Nesmí obsahovat ani
condition
poddotaz.Aby bylo omezení
CHECK
v Azure Databricks splněno, je třeba, aby se vyhodnotilo jakotrue
.Delta Lake ověřuje platnost omezení kontroly vůči novým i existujícím datům. Pokud některý existující řádek porušuje omezení, dojde k vyvolání chyby.
key_constraint
Důležité
Tato funkce je ve verzi Public Preview.
Platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyšší
Definuje informační primární klíč nebo omezení cizího klíče pro tabulku Delta Lake.
CONSTRAINT
JménoVolitelně můžete určit název omezení. Název musí být v rámci schématu jedinečný. Pokud není zadaný žádný název, Azure Databricks ho vygeneruje.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
platí pro:
pouze katalogu Unity.
Přidá omezení primárního klíče do tabulky Delta Lake. Tabulka může mít maximálně jeden primární klíč.
Omezení primárního klíče nejsou podporována pro tabulky v katalogu
hive_metastore
.-
Sloupec tabulky předmětu definovaný jako
NOT NULL
. Názvy sloupců se nesmí opakovat. TIMESERIES
Platí pro:
Databricks SQL
Databricks Runtime 13.3 LTS a vyšší
Volitelně označí komponentu sloupce primárního klíče jako reprezentaci časových intervalů.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
platí pro:
pouze katalogu Unity.
Přidá do tabulky Delta Lake omezení referenční integrity (cizí klíč).
Omezení cizího klíče nejsou podporována pro tabulky v katalogu
hive_metastore
.-
Sloupec tabulky tématu Názvy sloupců se nesmí opakovat. Datový typ každého sloupce musí odpovídat typu odpovídajícího
parent_column
. Počet sloupců musí odpovídat počtuparent_columns
. Dva cizí klíče nemohou sdílet stejnou sadu sloupců cizího klíče. -
Určuje tabulku, na které cizí klíč odkazuje. Tabulka musí mít definované omezení
PRIMARY KEY
a pro tabulku musíte mít oprávněníSELECT
. -
Sloupec v nadřazené tabulce, který je součástí primárního klíče. Všechny sloupce primárního klíče nadřazené tabulky musí být uvedeny.
Pokud nadřazené sloupce nejsou uvedené, předpokládá se, že jsou určené podle pořadí uvedeného v definici
PRIMARY KEY
.
Omezení cizího klíče, která se liší pouze v permutaci sloupců cizího klíče, nejsou povolena.
-
constraint_option
Vypíše vlastnosti omezení. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.
NOT ENFORCED
Azure Databricks neprosadí žádnou akci k vynucování pro existující nebo nové řádky.
DEFERRABLE
Vynucení omezení je možné odložit.
INITIALLY DEFERRED
Vynucení omezení je odloženo.
NORELY
neboRELY
Platí pro:
Databricks SQL
Databricks Runtime 14.2 a vyšší pro
PRIMARY KEY
omezeníplatí pro:
Databricks SQL
Databricks Runtime 15.4 a vyšší pro omezení
FOREIGN KEY
.Pokud
RELY
, azure Databricks může omezení zneužít k přepsání dotazů. Je zodpovědností uživatele, aby bylo zajištěno, že omezení bude splněno. Spoléhat se na omezení, které není splněno, může vést k nesprávným výsledkům dotazu.Výchozí hodnota je
NORELY
.
foreign_key_option
Zobrazí seznam vlastností specifických pro omezení cizího klíče. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.
MATCH FULL
Aby bylo omezení považováno za pravdivé, musí být všechny hodnoty sloupců
NOT NULL
.ON UPDATE NO ACTION
Pokud je nadřazená
PRIMARY KEY
aktualizovaná, služba Azure Databricks neprovádí žádnou akci, která by omezila aktualizaci nebo aktualizovala cizí klíč.ON DELETE NO ACTION
Pokud se nadřazený řádek odstraní, Azure Databricks neuskutečí žádnou akci k omezení akce, aktualizaci cizího klíče nebo odstranění závislého řádku.
Důležité
Azure Databricks nevynucuje omezení primárního klíče ani cizího klíče. Před přidáním primárního nebo cizího klíče potvrďte omezení klíče. Váš proces ingestování může poskytnout takové záruky nebo můžete spouštět kontroly vašich dat.
Příklady
-- 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);