Omezení v Azure Databricks
Azure Databricks podporuje standardní klauzule správy omezení SQL. Omezení spadají do dvou kategorií:
- Vynucené kontrainty zajišťují, aby se automaticky ověřila kvalita a integrita dat přidaných do tabulky.
- 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 pomocí rozdílových živých tabulek.
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 být 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. Podívejte se, jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake? Abyste porozuměli správě verzí protokolů tabulek a co to znamená k upgradu verze protokolu.
NOT NULL
Nastavení omezení v Azure Databricks
Omezení ve schématu zadáte NOT NULL
při vytváření tabulky. Pomocí příkazu vypustíte ALTER TABLE ALTER COLUMN
nebo přidáte NOT NULL
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 NOT NULL
omezení do tabulky Azure Databricks ověří, že omezení splňují všechny existující řádky.
Pokud zadáte NOT NULL
omezení 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í.
Viz CREATE TABLE [USING] a ALTER TABLE ALTER COLUMN.
CHECK
Nastavení omezení 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ěřuje, ž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í se zveřejňují jako vlastnosti tabulky ve výstupu DESCRIBE DETAIL
příkazů a SHOW TBLPROPERTIES
příkazů.
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í DROP FEATURE
příkazu odebrat omezení kontroly z tabulky a downgradovat protokol tabulky.
Viz Funkce 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í primárního klíče a cizího klíče vyžadují katalog Unity 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 information_schema
nebo použít DESCRIBE
k získání podrobností o tom, jak se omezení v daném katalogu použijí.
Přečtěte si: