Databricks の制約
Databricks では、標準の SQL 制約管理句がサポートされています。 制約は、次の 2 つのカテゴリに分類されます。
- 強制制約により、テーブルに追加されたデータの品質と整合性が自動的に検証されます。
- 情報プライマリ・キー制約と外部キー制約は、テーブル内のフィールド間のリレーションシップをエンコードし、強制されません。
Databricks のすべての制約には Delta Lake が必要です。
DLTには、期待と呼ばれる同様の概念があります。「パイプラインの期待値を使用してデータ品質を管理する」を参照してください。
Databricks に対する制約の強制
制約に違反すると、トランザクションはエラーで失敗します。 次の 2 種類の制約がサポートされています。
NOT NULL
: 特定の列の値を null にできないことを示します。CHECK
: 指定されたブール式が各入力行に対して true である必要があることを示します。
制約を追加すると、以前のライター・バージョンが 3 未満だった場合、テーブル・ライター・プロトコル・バージョンが自動的にアップグレードされます。「 Databricks で Delta Lake 機能の互換性を管理する方法 」を参照して、テーブル プロトコルのバージョン管理と、プロトコル バージョンをアップグレードすることの意味を理解してください。
Databricks で NOT NULL
制約を設定する
スキーマで NOT NULL
制約は、テーブルを作成するときに指定します。 NOT NULL
制約を削除または追加するには、ALTER TABLE ALTER COLUMN
コマンドを使用します。
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
テーブルに NOT NULL
制約を追加する前に、Databricks は既存のすべての行が制約を満たしていることを確認します。
構造体内にネストされた列に NOT NULL
制約を指定する場合、親構造体も null でなければいけません。 配列またはマップタイプ内でネストされた列は NOT NULL
制約を受け付けません。
CREATE TABLE [USING]とALTER TABLE ALTER COLUMNを参照してください。
Databricks で CHECK
制約を設定する
CHECK
制約は、ALTER TABLE ADD CONSTRAINT
コマンドと ALTER TABLE DROP CONSTRAINT
コマンドを使用して管理します。ALTER TABLE ADD CONSTRAINT
は、既存のすべてのローが制約を満たしていることを確認してから、テーブルに追加します。
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;
ALTER TABLE ADD CONSTRAINTとALTER TABLE DROP CONSTRAINTを参照してください。
CHECK
制約は、 DESCRIBE DETAIL
コマンドと SHOW TBLPROPERTIES
コマンドの出力でテーブル プロパティとして公開されます。
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
チェック制約を無効にする
Databricks Runtime 15.4 LTS 以降では、 DROP FEATURE
コマンドを使用して、テーブルからチェック制約を削除し、テーブル プロトコルをダウングレードできます。
ドロップDeltaテーブル機能を参照してください。
主キーと外部キーの関係を宣言します
- 主キー制約と外部キー制約は、Databricks Runtime 11.3 LTS 以降で使用でき、Databricks Runtime 15.2 以降では完全に GA です。
- 主キーと外部キーの制約には、Unity Catalog と Delta Lake が必要です。
主キーと外部キーのリレーションシップは、Unity Catalog テーブルのフィールドで使用できます。 プライマリ・キーと外部キーは情報提供のみを目的としており、強制されません。 外部キーは、別のテーブルのプライマリ・キーを参照する必要があります。
プライマリ・キーと外部キーは、テーブルの作成時にテーブル指定句の一部として宣言できます。 この句は、CTAS ステートメントでは許可されません。 既存のテーブルに制約を追加することもできます。
CREATE TABLE T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE TABLE S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T);
information_schema
をクエリするか、DESCRIBE
を使用して、特定のカタログに制約がどのように適用されるかについての詳細を取得できます。
以下をご覧ください: