Omezení v Azure Databricks
Azure Databricks podporuje standardní klauzule správy omezení SQL. Omezení spadají do dvou kategorií:
- Vynucená omezení zajišťují, že kvalita a integrita dat přidaných do tabulky je automaticky ověřována.
- Informační primární klíč a omezení cizího klíče kódují relace mezi poli v tabulkách a nevynucují se.
Všechna omezení v Azure Databricks vyžadují Delta Lake.
Delta Live Tables má podobný koncept, který se označuje jako očekávání. Viz Správa kvality dat s očekáváním datového toku.
Vynucená omezení v Azure Databricks
Když dojde k porušení omezení, transakce selže s chybou. Podporují se 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.
Důležité
Přidání omezení automaticky upgraduje verzi protokolu zápisu tabulky, pokud byla předchozí verze zapisovače menší než 3. Viz Jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake? pochopit správu verzí tabulkových protokolů a co znamená upgrade verze protokolu.
Nastavení omezení NOT NULL
v Azure Databricks
Při vytváření tabulky zadáte omezení NOT NULL
ve schématu. Pomocí příkazu vypustíte NOT NULL
nebo přidáte ALTER TABLE ALTER COLUMN
omezení.
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;
Před přidáním omezení NOT NULL
do tabulky Azure Databricks ověří, že omezení splňují všechny existující řádky.
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.
Nastavení omezení CHECK
v Azure Databricks
Omezení spravujete CHECK
pomocí ALTER TABLE ADD CONSTRAINT
příkazů a ALTER TABLE DROP CONSTRAINT
příkazů.
ALTER TABLE ADD CONSTRAINT
ověří, že všechny existující řádky splňují omezení před přidáním do 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.
CHECK
omezení jsou vystavena jako vlastnosti tabulky ve výstupu příkazů DESCRIBE DETAIL
a SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Zakázání omezení kontroly
Ve službě Databricks Runtime 15.4 LTS a vyšší můžete pomocí příkazu DROP FEATURE
odebrat omezení kontroly z tabulky a downgradovat protokol tabulky.
Podívejte se na vlastnosti tabulky Drop Delta.
Deklarace vztahů mezi primárním klíčem a cizím klíčem
Poznámka:
- Omezení primárního klíče a cizího klíče jsou k dispozici v Databricks Runtime 11.3 LTS a vyšší a jsou plně dostupná ve verzi Databricks Runtime 15.2 a vyšší.
- Omezení na primární a cizí klíč vyžadují Unity Catalog a Delta Lake.
Relace primárního klíče a cizího klíče můžete použít u polí v tabulkách katalogu Unity. Primární a cizí klíče jsou pouze informativní a nevynucují se. Cizí klíče musí odkazovat na primární klíč v jiné tabulce.
Během vytváření tabulky můžete deklarovat primární klíče a cizí klíče jako součást klauzule specifikace tabulky. Tato klauzule není povolena během příkazů CTAS. Do existujících tabulek můžete také přidat omezení.
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);
Můžete se dotazovat na information_schema
nebo pomocí DESCRIBE
získat podrobnosti o tom, jak se omezení v daném katalogu použijí.
Přečtěte si: