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