適用対象:
Databricks SQL
Databricks Runtime
情報主キー、情報外部キー、または強制チェック制約を既存の Delta Lake テーブルに追加します。
構文
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition )
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ 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 }
標準以外の SQL 言語との互換性を確保するために、ENABLE NOVALIDATE の代わりに NOT ENFORCED DEFERRABLE INITIALLY DEFERRED を指定できます。
パラメーター
check_constraintリレーションのチェック制約を定義します。
CONSTRAINT名前制約の名前を指定します。 名前は、リレーションシップ内で一意である必要があります。
CHECK (条件)リレーションシップの
DEFAULT COLLATIONは、制約の追加時にUTF8_BINARYする必要があります。conditionはBOOLEAN値を返す決定論的式である必要があります。conditionは、リテラル、リレーションシップ内の列識別子、および決定論的な組み込み SQL 関数または演算子で構成できます。ただし、次を除きます。また
conditionには、サブクエリを含めることはできません。CHECK制約が Azure Databricks で満たされるようにするには、trueに評価される必要があります。Delta Lake では、新規および既存データの両方に対する CHECK 制約の有効性を検証します。 既存の行が制約に違反している場合、エラーが発生します。
key_constraint重要
この機能はパブリック プレビュー段階にあります。
適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以降リレーションの 情報 主キーまたは 情報 外部キー制約を定義します。 情報キー制約は適用されませんが、 クエリの最適化をサポートすることでパフォーマンスを向上させることができます。
CONSTRAINT名前必要に応じて、制約の名前を指定します。 名前は、スキーマ内で一意である必要があります。 名前が指定されていない場合は、Azure Databricks によって生成されます。
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]適用対象:
Unity Catalog のみリレーションシップに主キー制約を追加します。 リレーションシップには、最大で 1 つの主キーを含めることができます。
主キー制約は、
hive_metastoreカタログ内のリレーションではサポートされていません。-
NOT NULLとして定義されたサブジェクト関係の列。 列名を繰り返してはなりません。 TIMESERIES適用対象:
Databricks SQL
Databricks Runtime 13.3 LTS 以上必要に応じて、主キー列コンポーネントに時系列を表すラベルを付けます。
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_option適用対象:
Unity Catalog のみリレーションシップに外部キー (参照整合性) 制約を追加します。
外部キー制約は、
hive_metastoreカタログ内のリレーションではサポートされていません。-
対象に関する列。 列名を繰り返してはなりません。 各列のデータ型は対応する
parent_columnのデータ型と一致する必要があります。 列の数はparent_columnsの数と一致する必要があります。 2 つの外部キーは、同一の外部キー列セットを共有できません。 -
外部キーが参照する関係を指定します。 リレーションシップには定義済みの
PRIMARY KEY制約が必要であり、リレーションシップに対するSELECT特権が必要です。 -
親リレーションの主キーに含まれる列。 親リレーションシップのすべての主キー列を一覧表示する必要があります。
親列が一覧にない場合、それらは
PRIMARY KEY定義で指定された順序で暗黙的に指定されます。
外部キー列の順列のみが異なる外部キー制約は許可されません。
-
constraint_option制約のプロパティを一覧表示します。 すべてのプロパティは省略可能ですが、既定では暗黙的に指定されます。 各プロパティは、最大 1 回指定できます。
NOT ENFORCEDAzure Databricks で、既存または新規の行にそれを適用するためのアクションは実行されません。
DEFERRABLE制約の適用は延期できます。
INITIALLY DEFERRED制約の適用は延期されます。
NORELYまたはRELY適用対象:
Databricks SQL
Databricks Runtime 14.2 以上 (PRIMARY KEY制約の場合)適用対象:
Databricks SQL
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);