ADD CONSTRAINT 句

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

情報主キー、情報外部キー、または適用される Check 制約を既存の Delta Lake テーブルに追加します。

構文

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 }

標準以外の SQL 言語との互換性を確保するために、NOT ENFORCED DEFERRABLE INITIALLY DEFERRED の代わりに ENABLE NOVALIDATE を指定できます。

パラメーター

  • check_constraint

    Delta Lake テーブルの CHECK 制約を定義します。

    • CONSTRAINTname

      制約の名前を指定します。 名前はテーブル内で一意にする必要があります。 名前が指定されていない場合は、Azure Databricks によって生成されます。

    • CHECK (condition)

      conditionBOOLEAN 値を返す決定論的式である必要があります。

      condition は、以下のものを除く、リテラル、テーブル内の列識別子、および決定論的な組み込みの SQL 関数または演算子で構成される場合があります。

      また condition には、サブクエリを含めることはできません。

      CHECK 制約が Azure Databricks で満たされるようにするには、true に評価される必要があります。

      Delta Lake では、新規および既存データの両方に対する CHECK 制約の有効性を検証します。 既存の行が制約に違反している場合、エラーが発生します。

  • key_constraint

    重要

    この機能はパブリック プレビュー段階にあります。

    適用対象: check marked yes Databricks SQL 「はい」のチェック マーク Databricks Runtime 11.3 LTS 以降

    Delta Lake テーブルの情報主キーまたは情報外部キーの制約を定義します。

    • CONSTRAINTname

      必要に応じて、制約の名前を指定します。 名前は、スキーマ内で一意である必要があります。 名前が指定されていない場合は、Azure Databricks によって生成されます。

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

      適用対象: 「はい」のチェック マーク Unity Catalog のみ

      Delta Lake テーブルに主キー制約を追加します。 テーブルに含めることができる主キーは 1 つまでです。

      主キー制約は、hive_metastore カタログ内のテーブルではサポートされていません。

    • key_column

      NOT NULL として定義されたサブジェクト テーブルの列。 列名を繰り返してはなりません。

    • TIMESERIES

      適用対象: check marked yes Databricks SQL Databricks Runtime 13.3 LTS 以上

      必要に応じて、主キー列コンポーネントに時系列を表すラベルを付けます。

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

      適用対象: 「はい」のチェック マーク Unity Catalog のみ

      外部キー (参照整合性) 制約を Delta Lake テーブルに追加します。

      外部キー制約は、hive_metastore カタログ内のテーブルではサポートされていません。

      • foreign_key_column

        サブジェクト テーブルの列。 列名を繰り返してはなりません。 各列のデータ型は対応する parent_column のデータ型と一致する必要があります。 列の数は parent_columns の数と一致する必要があります。 2 つの外部キーは、同一の外部キー列セットを共有できません。

      • parent_table

        外部キーが参照するテーブルを指定します。 テーブルには定義済みの PRIMARY KEY 制約があり、テーブルに対する SELECT 権限が必要です。

      • parent_column

        主キーの一部である親テーブル内の列。 親テーブルのすべての主キー列を一覧表示する必要があります。

        親列が一覧にない場合、それらは PRIMARY KEY 定義で指定された順序で暗黙的に指定されます。

      外部キー列の順列のみが異なる外部キー制約は許可されません。

    • constraint_option

      制約のプロパティを一覧表示します。 すべてのプロパティは省略可能ですが、既定では暗黙的に指定されます。 各プロパティは、最大 1 回指定できます。

      • NOT ENFORCED

        Azure Databricks で、既存または新規の行にそれを適用するためのアクションは実行されません。

      • DEFERRABLE

        制約の適用は延期できます。

      • INITIALLY DEFERRED

        制約の適用は延期されます。

      • NORELY または RELY

        適用対象: check marked yes Databricks SQL Databricks Runtime 14.2 以降 (PRIMARY KEY 制約の場合)

        適用対象: Databricks Runtime 15.4 以降 (FOREIGN KEY 制約の場合)

        RELY の場合、Azure Databricks は制約を利用してクエリを書き換える可能性があります。 制約が満たされていることを確認するのはユーザーの責任です。 満たされていない制約に依存すると、クエリ結果が正しくなくなる場合があります。

        既定値は、NORELY です。

    • foreign_key_option

      外部キー制約に固有のプロパティを一覧表示します。 すべてのプロパティは省略可能ですが、既定では暗黙的に指定されます。 各プロパティは、最大 1 回指定できます。

      • MATCH FULL

        制約を true と見なすには、すべての列の値が NOT NULL である必要があります。

      • ON UPDATE NO ACTION

        親の PRIMARY KEY が更新された場合、Azure Databricks では、更新の制限や外部キーの更新を行うためのアクションを実行しません。

      • ON DELETE NO ACTION

        親の行が削除された場合、Azure Databricks では、アクションの制限、外部キーの更新、依存行の削除を行うためのアクションを実行しません。

重要

Azure Databricks で、主キーまたは外部キーの制約は適用されません。 主キーまたは外部キーを追加する前に、キー制約を確認します。 取り込みプロセスによってこのような保証が提供される場合があります。または、データに対してチェックを実行することもできます。

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