Sdílet prostřednictvím


Klauzule ADD CONSTRAINT

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Přidá informační primární klíč, informační cizí klíč nebo vynucené omezení kontroly do existující tabulky Delta Lake.

Syntaxe

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
        { FOREIGN KEY (foreign_key_column [, ...] )
          REFERENCES parent_table [ ( parent_column [, ...] ] )
          [ constraint_option | foreign_key_option ] [...]
      }
    }

constraint_option
    { NOT ENFORCED |
      DEFERRABLE |
      INITIALLY DEFERRED |
      { NORELY | RELY } }

foreign_key_option
    { MATCH FULL |
      ON UPDATE NO ACTION |
      ON DELETE NO ACTION }

Kvůli kompatibilitě s nestandardními dialekty SQL můžete místo ENABLE NOVALIDATE NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parametry

  • check_constraint

    Definuje omezení kontroly pro tabulku Delta Lake.

    • CONSTRAINTJméno

      Určuje název omezení. Název musí být v tabulce jedinečný. Pokud není zadaný žádný název, Azure Databricks ho vygeneruje.

    • CHECK (podmínka)

      conditionmusí být deterministický výraz vracející znak .BOOLEAN

      condition mohou se skládat z literálů, identifikátorů sloupců v tabulce a deterministické předdefinované funkce nebo operátory SQL s výjimkou:

      Nesmí obsahovat ani condition poddotaz.

      CHECK Aby bylo omezení v Azure Databricks splněno, musí být vyhodnoceno jako true.

      Delta Lake ověřuje platnost omezení kontroly vůči novým i existujícím datům. Pokud některý existující řádek porušuje omezení, dojde k vyvolání chyby.

  • key_constraint

    Důležité

    Tato funkce je ve verzi Public Preview.

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší

    Definuje omezení informačního primárního klíče nebo informačního cizího klíče pro tabulku Delta Lake.

    • CONSTRAINTJméno

      Volitelně můžete určit název omezení. Název musí být v rámci schématu jedinečný. Pokud není zadaný žádný název, Azure Databricks ho vygeneruje.

    • PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]

      Platí pro: zaškrtnutí označeného ano Pouze katalog Unity

      Přidá omezení primárního klíče do tabulky Delta Lake. Tabulka může mít maximálně jeden primární klíč.

      Omezení primárního hive_metastore klíče nejsou podporována pro tabulky v katalogu.

    • key_column

      Sloupec tabulky předmětu definovaný jako NOT NULL. Názvy sloupců se nesmí opakovat.

    • TIMESERIES

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 13.3 LTS a vyšší

      Volitelně označí komponentu sloupce primárního klíče jako reprezentaci časových intervalů.

    • FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

      Platí pro: zaškrtnutí označeného ano Pouze katalog Unity

      Přidá do tabulky Delta Lake omezení cizího klíče (referenční integrita).

      Omezení cizího hive_metastore klíče nejsou podporována pro tabulky v katalogu.

      • foreign_key_column

        Sloupec tabulky předmětu Názvy sloupců se nesmí opakovat. Datový typ každého sloupce se musí shodovat s typem odpovídajícího parent_columnsloupce . Počet sloupců se musí shodovat s počtem .parent_columns Dva cizí klíče nemůžou sdílet identickou sadu sloupců cizího klíče.

      • parent_table

        Určuje tabulku, na které cizí klíč odkazuje. Tabulka musí mít definované PRIMARY KEY omezení a musíte mít SELECT oprávnění k tabulce.

      • parent_column

        Sloupec v nadřazené tabulce, který je součástí primárního klíče. Všechny sloupce primárního klíče nadřazené tabulky musí být uvedené.

        Pokud nadřazené sloupce nejsou uvedené, jsou odvozeny tak, aby byly zadány v pořadí uvedeném v definici PRIMARY KEY .

      Omezení cizího klíče, která se liší pouze v permutaci sloupců cizího klíče, nejsou povolena.

    • constraint_option

      Vypíše vlastnosti omezení. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.

      • NOT ENFORCED

        Azure Databricks neprosadí žádnou akci k vynucování pro existující nebo nové řádky.

      • DEFERRABLE

        Vynucení omezení je možné odložit.

      • INITIALLY DEFERRED

        Vynucení omezení je odloženo.

      • NORELY nebo RELY

        Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 14.2 a vyšší

        Pokud RELYmůže Azure Databricks omezení zneužít k přepsání dotazů. Je zodpovědností uživatele, aby bylo zajištěno, že omezení bude splněno. Spoléhat se na omezení, které není splněno, může vést k nesprávným výsledkům dotazu.

        Výchozí hodnota je NORELY.

    • foreign_key_option

      Zobrazí seznam vlastností specifických pro omezení cizího klíče. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.

      • MATCH FULL

        Aby bylo omezení považováno za pravdivé, musí být NOT NULLvšechny hodnoty sloupců .

      • ON UPDATE NO ACTION

        Pokud se nadřazený objekt PRIMARY KEY aktualizuje, Azure Databricks neprodá žádnou akci k omezení aktualizace nebo aktualizaci cizího klíče.

      • ON DELETE NO ACTION

        Pokud se nadřazený řádek odstraní, Azure Databricks neuskutečí žádnou akci k omezení akce, aktualizaci cizího klíče nebo odstranění závislého řádku.

Důležité

Azure Databricks nevynucuje omezení primárního klíče ani cizího klíče. Před přidáním primárního nebo cizího klíče potvrďte omezení klíče. Váš proces ingestování může poskytnout takové záruky nebo můžete spouštět kontroly vašich dat.

Příklady

-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);

-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
    FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
    NOT ENFORCED RELY;

-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);