Az Azure Databricks korlátozásai

Azure Databricks támogatja a szabványos SQL-kényszerkezelési záradékokat:

  • A korlátozások ellenőrzik az adatintegritást, mielőtt sorokat adunk egy táblához.
  • Az információs kényszerek (elsődleges kulcs, idegen kulcs és egyedi kényszerek) a táblák mezői közötti kapcsolatokat határozzák meg, és nincsenek kényszerítve.

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

A Lakeflow-folyamatokkal kapcsolatos egyik fogalomról lásd: Az adatminőség kezelése folyamatelvárásokkal.

Kikényszerített korlátozások

Ha egy korlátozást megsértenek, a tranzakció hiba miatt meghiúsul. Azure Databricks kétféle kényszert támogat:

  • NOT NULL: azt jelzi, hogy az 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.

Note

A megszorítás hozzáadása frissíti a táblaírási protokollt, ha az aktuális íróprotokoll-verzió 3-nál kisebb. Ez hatással lehet a külső Delta Lake-ügyfelekkel való kompatibilitásra. Lásd a Delta Lake szolgáltatáskompatibilitását és protokolljait.

NOT NULL kényszer

Tábla létrehozásakor adjon meg NOT NULL korlátozásokat a sémában. Kényszerek elvetéséhez vagy hozzáadásához használja a következő NOT NULL parancsot: ALTER TABLE ... ALTER COLUMN

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;

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

Ha egy szerkezetbe ágyazott oszlopra NOT NULL kényszert ad meg, 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 kényszer

A CHECK korlátozások kezelése a ALTER TABLE ADD CONSTRAINT és ALTER TABLE DROP CONSTRAINT parancsokkal. ALTER TABLE ADD CONSTRAINT ellenőrzi, hogy az összes meglévő sor megfelel-e a korlátozásnak, mielőtt hozzáadja a korlátozást a táblához.

A korlátozások ellenőrzésére a következő korlátozások vonatkoznak:

  • A CHECK kényszerkifejezések bármilyen SQL-függvényt használhatnak a Sparkban, amely mindig ugyanazt az eredményt adja vissza ugyanazon argumentumértékek megadásakor, kivéve a következő függvénytípusokat:
    • Felhasználó által definiált függvények.
    • Összesítő függvények.
    • Ablakfüggvények.
    • Több sort visszaadó függvények.

Hozzáadás meglévő táblához

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;

Lásd: ALTER TABLE ADD CONSTRAINT és ALTER TABLE DROP CONSTRAINT.

A korlátozástáblázat tulajdonságainak megtekintése

Táblák DESCRIBE DETAIL korlátainak megtekintéséhez használja a SHOW TBLPROPERTIES és a CHECK parancsokat.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Ellenőrzési korlátozások eltávolítása

A Databricks Runtime 15.4 LTS-ben és újabb verziókban a(z) DROP FEATURE parancs segítségével távolítsa el az ellenőrző korlátozásokat egy táblából, és módosítsa vissza a táblaprotokoll verzióját.

Lásd Delta Lake tábla funkció elhagyása és a tábla protokolljának leminősítése.

Elsődleges kulcs, idegen kulcs és egyedi korlátozások deklarálása

Az elsődleges kulcs, az idegen kulcs és az egyedi korlátozások csak tájékoztató jellegűek, és nincsenek kényszerítve. A lekérdezésoptimalizálással javíthatják a teljesítményt.

  • Elsődleges kulcs és idegen kulcs: a Unity Catalog és Delta Lake-táblákhoz érhető el a Databricks Runtime 13.3 LTS-ben és újabb verziókban. GA a Databricks Runtime 15.2-es és újabb verzióiban. Az idegen kulcsnak egy elsődleges kulcsra vagy egy másik táblában található egyedi korlátozásra kell hivatkoznia.
  • Egyedi: nyilvános előzetesként érhető el a Unity Catalog- és Delta Lake-táblákhoz a Databricks SQL-ben és a Databricks Runtime 18.2-es és újabb verzióiban. Egy tábla több egyedi korlátozással is rendelkezhet. Az idegen kulcsok a következővel hivatkozhatnak egy egyedi oszlopra: REFERENCES parent_table(unique_col). Az egyedi oszlopok null értékűek lehetnek, mert NULL az értékek egymástól eltérőként vannak kezelve.

Kérdezze le a information_schema elemet, használja a DESCRIBE TABLE EXTENDED elemet, vagy a SHOW CREATE TABLE elemet, hogy részletes információkat kapjon arról, hogyan alkalmazzák a megkötéseket az adott katalógusban.

Hozzáadás új táblákhoz

Deklarálja az elsődleges kulcsokat, az idegen kulcsokat és az egyedi korlátozásokat a táblaspecifikációs záradék részeként a tábla létrehozása során:

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);
CREATE TABLE U(id INTEGER NOT NULL, email STRING NOT NULL,
                CONSTRAINT u_uq_email UNIQUE(email));

A CTAS-utasítások nem támogatják ezt a korlátozási záradékot.

Hozzáadás meglévő táblákhoz

Korlátozások hozzáadása meglévő táblákhoz:

ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;
ALTER TABLE U ADD CONSTRAINT u_uq_email UNIQUE(email);

További erőforrások