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.
Platí pro:
Databricks SQL
Databricks Runtime
Přidá informační primární klíč, informační cizí klíč, informační jedinečné omezení nebo vynucené omezení kontroly do existující tabulky Delta Lake.
Syntaxe
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition )
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
UNIQUE ( key_column [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_relation [ ( 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 NOVALIDATENOT ENFORCED DEFERRABLE INITIALLY DEFERRED.
Parametry
check_constraintDefinuje omezení kontroly pro relaci.
CONSTRAINTJménoUrčuje název omezení. Název musí být v rámci relace jedinečný.
CHECK (podmínka)Relace
DEFAULT COLLATIONmusí býtUTF8_BINARYv době přidání omezení.conditionmusí být deterministický výraz vracejícíBOOLEAN.conditionmohou se skládat z literálů, identifikátorů sloupců v rámci relace a deterministické předdefinované funkce nebo operátory SQL s výjimkou:- Agregační funkce
- Analytické okenní funkce
- Okna funkcí pro hodnocení
- Funkce generátoru tabulkových hodnot
-
STRINGsloupců s jinými kolacemi nežUTF8_BINARY
Také
conditionnesmí obsahovat žádný poddotaz.Aby bylo omezení
CHECKv 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_constraintDů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íč, informační cizí klíč nebo omezení jedinečné informace pro relaci. Informační klíčová omezení se nevynucují, ale můžou zlepšit výkon díky podpoře optimalizací dotazů.
CONSTRAINTJmé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 katalog UnityPřidá omezení primárního klíče do relace. Relace může mít maximálně jeden primární klíč.
Omezení primárních klíčů nejsou podporována u relací v katalogu
hive_metastore.-
Sloupec vztahu předmětu definovaného jako
NOT NULL. Názvy sloupců se nesmí opakovat. TIMESERIESPlatí pro:
Databricks SQL
Databricks Runtime 13.3 LTS a vyššíVolitelně označí komponentu sloupce primárního klíče jako reprezentaci časových intervalů.
UNIQUE ( key_column [, ...] ) [ constraint_option [...] ]Platí pro:
Databricks SQL
Databricks Runtime 18.2 and above
Unity Catalog onlyPřidá do relace jedinečné omezení. Relace může mít několik jedinečných omezení.
Sloupce v
UNIQUEomezení můžou mít hodnotu null.NULLhodnoty veUNIQUEsloupcích jsou považovány za odlišné od sebe, takže duplicitníNULLhodnoty neporušují sémantikuUNIQUEomezení.Pro vztahy v
hive_metastorekatalogu nejsou podporována jedinečná omezení.-
Sloupec vztahu subjektu. Názvy sloupců se nesmí opakovat.
-
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_optionPlatí pro:
Pouze katalog UnityPřidá do vztahu omezení cizího klíče (referenční integrita).
Omezení cizího
hive_metastoreklíče nejsou podporována pro vztahy v katalogu.-
Sloupec vztahu subjektu. 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 vztah, na který cizí klíč odkazuje. Tento vztah musí mít definované
PRIMARY KEYomezení nebo v Databricks Runtime 18.2 a vyšší definovanéUNIQUEomezení a musíte mítSELECToprávnění k relaci. -
Sloupec v nadřazené relaci, která je součástí primárního klíče nebo v Databricks Runtime 18.2 a vyšší, je součástí jedinečného omezení. Všechny sloupce primárního klíče nebo jedinečné sloupce omezení nadřazené relace 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_optionVypíš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 ENFORCEDAzure Databricks neprosadí žádnou akci k vynucování pro existující nebo nové řádky.
DEFERRABLEVynucení omezení je možné odložit.
INITIALLY DEFERREDVynucení omezení je odloženo.
NORELYneboRELYPlatí pro:
Databricks SQL
Databricks Runtime 14.2 a vyšší pro PRIMARY KEYomezeníplatí pro:
Databricks SQL
Databricks Runtime 15.4 a vyšší pro omezení FOREIGN KEY.Platí pro:
Databricks SQL
Databricks Runtime 18.2 and above for UNIQUEconstraintsPokud
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_optionZobrazí 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 FULLAby bylo omezení považováno za pravdivé, musí být všechny hodnoty sloupců
NOT NULL.ON UPDATE NO ACTIONPokud je nadřazená
PRIMARY KEYaktualizovaná, služba Azure Databricks neprovádí žádnou akci, která by omezila aktualizaci nebo aktualizovala cizí klíč.ON DELETE NO ACTIONPokud 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 primární klíč, cizí klíč ani jedinečná omezení. Před přidáním primárního klíče, cizího klíče nebo jedinečného omezení 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);
-- Add a unique constraint
> CREATE TABLE person_emails(first_name STRING NOT NULL, last_name STRING NOT NULL, email STRING);
> ALTER TABLE person_emails ADD CONSTRAINT person_emails_uq UNIQUE(email);