Az Azure Databricks korlátozásai

Az Azure Databricks támogatja a szabványos SQL-kényszerkezelési záradékokat. A korlátozások két kategóriába sorolhatók:

  • A kényszerített ellenjavallatok biztosítják, hogy a táblához hozzáadott adatok minősége és integritása automatikusan ellenőrizve legyen.
  • Az információs elsődleges kulcs és az idegenkulcs-megkötések a táblák mezői közötti kapcsolatokat kódolják, és nem kényszerítik őket.

Az Azure Databricksre vonatkozó összes korlátozáshoz Delta Lake szükséges.

A Delta Live Tables hasonló fogalom, más néven elvárások. Lásd: Adatminőség kezelése Delta Live Tables használatával.

Kényszerített korlátozások az Azure Databricksben

Ha egy korlátozást megsértenek, a tranzakció hiba miatt meghiúsul. Kétféle korlátozás támogatott:

  • NOT NULL: azt jelzi, hogy adott oszlopok értékei nem lehetnek null értékűek.
  • CHECK: azt jelzi, hogy egy megadott logikai kifejezésnek igaznak kell lennie az egyes bemeneti sorokhoz.

Fontos

A korlátozás hozzáadása automatikusan frissíti a táblaíró protokolljának verzióját, ha az előző írói verzió 3-nál kisebb volt. Tekintse meg, hogyan kezeli az Azure Databricks a Delta Lake szolgáltatáskompatibilitását?

NOT NULL Korlátozás beállítása az Azure Databricksben

Megjegyzés:

  • SET NOT NULL a Databricks Runtime 7.4-ben és újabb verziókban érhető el.

Tábla létrehozásakor meg kell határoznia NOT NULL a sémában a korlátozásokat. A parancs használatával ALTER TABLE ALTER COLUMN elvethet vagy hozzáadhat NOT NULL korlátozásokat.

CREATE TABLE people10m (
  id INT NOT NULL,
  firstName STRING,
  middleName STRING NOT NULL,
  lastName STRING,
  gender STRING,
  birthDate TIMESTAMP,
  ssn STRING,
  salary INT
) USING DELTA;

ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;

Mielőtt kényszert NOT NULL ad egy táblához, az Azure Databricks ellenőrzi, hogy az összes meglévő sor megfelel-e a korlátozásnak.

Ha egy szerkezetbe ágyazott oszlopra kényszert ad meg NOT NULL , a szülőstruktúra nem lehet null értékű. A tömb- vagy térképtípusokba beágyazott oszlopok nem fogadnak el NOT NULL korlátozásokat.

Lásd: CREATE TABLE [USING] és ALTER TABLE ALTER COLUMN.

CHECK Korlátozás beállítása az Azure Databricksben

A korlátozásokat a parancsok és ALTER TABLE DROP CONSTRAINT a ALTER TABLE ADD CONSTRAINT parancsok használatával kezelhetiCHECK. ALTER TABLE ADD CONSTRAINT ellenőrzi, hogy az összes meglévő sor megfelel-e a korlátozásnak, mielőtt hozzáadja azt a táblához.

CREATE TABLE people10m (
  id INT,
  firstName STRING,
  middleName STRING,
  lastName STRING,
  gender STRING,
  birthDate TIMESTAMP,
  ssn STRING,
  salary INT
) USING DELTA;

ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;

Lásd: ALTER TABLE ADD CONSTRAINT and ALTER TABLE DROP CONSTRAINT.

CHECKa korlátozások táblatulajdonságokként jelennek meg a kimenetben és SHOW TBLPROPERTIES a DESCRIBE DETAIL parancsokban.

ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Elsődleges kulcs- és idegenkulcs-kapcsolatok deklarálása

Fontos

Ez a funkció a nyilvános előzetes verzióban érhető el.

Megjegyzés:

  • Az elsődleges kulcs és a külső kulcs korlátozásai a Databricks Runtime 11.1-ben és újabb verziókban érhetők el.
  • Az elsődleges kulcsra és a külső kulcsra vonatkozó korlátozásokhoz a Unity Catalog és a Delta Lake szükséges.

A Unity Catalog-táblák mezőiben elsődleges kulcs- és idegenkulcs-kapcsolatokat használhat. Az elsődleges és idegen kulcsok csak tájékoztató jellegűek, és nem kényszeríthetők ki. Az idegen kulcsnak egy másik táblában lévő elsődleges kulcsra kell hivatkoznia.

Az elsődleges kulcsokat és az idegen kulcsokat a tábla specifikációs záradékának részeként deklarálhatja a tábla létrehozása során. Ez a záradék nem engedélyezett a CTAS-utasítások során. A meglévő táblákhoz kényszereket is hozzáadhat.

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);

Lekérdezheti a information_schema korlátozásokat egy adott katalógusra, vagy DESCRIBE lekérdezheti a korlátozásokat.

See: