Sdílet prostřednictvím


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: