klauzule ADD CONSTRAINT

Platí pro:ano (zaškrtnuto) Databricks SQL ano (zaškrtnuto) Databricks Runtime

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

Syntaxe

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition )

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
        UNIQUE ( key_column [, ...] ) [ constraint_option [...] ] |
        { FOREIGN KEY (foreign_key_column [, ...] )
          REFERENCES parent_relation [ ( 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 NOVALIDATENOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parametry

  • check_constraint

    Definuje omezení kontroly pro relaci.

    • CONSTRAINT Jméno

      Určuje název omezení. Název musí být v rámci relace jedinečný.

    • CHECK ( podmínka)

      Relace DEFAULT COLLATION musí být UTF8_BINARY v době přidání omezení.

      condition musí být deterministický výraz vracející BOOLEAN.

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

      Také condition nesmí obsahovat žádný poddotaz.

      Aby bylo omezení CHECK v Azure Databricks splněno, je třeba, aby se vyhodnotilo 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:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime 11.3 LTS a vyšší

    Definuje informační primární klíč, informační cizí klíč nebo omezení jedinečné informace pro relaci. Informační klíčová omezení se nevynucují, ale můžou zlepšit výkon díky podpoře optimalizací dotazů.

    • CONSTRAINT Jmé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škrtnuto ano Pouze katalog Unity

      Přidá omezení primárního klíče do relace. Relace může mít maximálně jeden primární klíč.

      Omezení primárních klíčů nejsou podporována u relací v katalogu hive_metastore.

    • key_column

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

    • TIMESERIES

      Platí pro:označeno zaškrtnutím Databricks SQL označeno zaškrtnutím Databricks Runtime 13.3 LTS a vyšší

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

    • UNIQUE ( key_column [, ...] ) [ constraint_option [...] ]

      Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime 18.2 and above check marked yes Unity Catalog only

      Přidá do relace jedinečné omezení. Relace může mít několik jedinečných omezení.

      Sloupce v UNIQUE omezení můžou mít hodnotu null. NULL hodnoty ve UNIQUE sloupcích jsou považovány za odlišné od sebe, takže duplicitní NULL hodnoty neporušují sémantiku UNIQUE omezení.

      Pro vztahy v hive_metastore katalogu nejsou podporována jedinečná omezení.

      • key_column

        Sloupec vztahu subjektu. Názvy sloupců se nesmí opakovat.

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

      Platí pro:zaškrtnuto ano Pouze katalog Unity

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

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

      • cizí_klíčový_sloupec

        Sloupec vztahu subjektu. Názvy sloupců se nesmí opakovat. Datový typ každého sloupce musí odpovídat typu odpovídajícího parent_column. Počet sloupců musí odpovídat počtu parent_columns. Dva cizí klíče nemohou sdílet stejnou sadu sloupců cizího klíče.

      • parent_relation

        Určuje vztah, na který cizí klíč odkazuje. Tento vztah musí mít definované PRIMARY KEY omezení nebo v Databricks Runtime 18.2 a vyšší definované UNIQUE omezení a musíte mít SELECT oprávnění k relaci.

      • parent_column

        Sloupec v nadřazené relaci, která je součástí primárního klíče nebo v Databricks Runtime 18.2 a vyšší, je součástí jedinečného omezení. Všechny sloupce primárního klíče nebo jedinečné sloupce omezení nadřazené relace musí být uvedeny.

        Pokud nadřazené sloupce nejsou uvedené, předpokládá se, že jsou určené podle pořadí uvedeného 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škrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 14.2 a vyšší pro PRIMARY KEY omezení

        platí pro:(zaškrtněte políčko Ano) Databricks SQL (zaškrtněte políčko Ano) Databricks Runtime 15.4 a vyšší pro omezení FOREIGN KEY.

        Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime 18.2 and above for UNIQUE constraints

        Pokud RELY, azure Databricks může 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 všechny hodnoty sloupců NOT NULL.

      • ON UPDATE NO ACTION

        Pokud je nadřazená PRIMARY KEY aktualizovaná, služba Azure Databricks neprovádí žádnou akci, která by omezila aktualizaci nebo aktualizovala cizí klíč.

      • 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 primární klíč, cizí klíč ani jedinečná omezení. Před přidáním primárního klíče, cizího klíče nebo jedinečného omezení 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);

-- Add a unique constraint
> CREATE TABLE person_emails(first_name STRING NOT NULL, last_name STRING NOT NULL, email STRING);
> ALTER TABLE person_emails ADD CONSTRAINT person_emails_uq UNIQUE(email);