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: