Azure Databricks の制約
Azure Databricks では、標準の SQL 制約管理句がサポートされています。 制約は 2 つのカテゴリに分けられます。
- 適用される制約によって、テーブルに追加されたデータの品質と整合性が自動的に検証されます。
- 情報主キー制約と外部キー制約によって、テーブル内のフィールド間のリレーションシップがエンコードされ、制約は適用されません。
Azure Databricks のすべての制約には Delta Lake が必要です。
Delta Live Tables には、期待値と呼ばれる同様の概念があります。 「Delta Live Tables を使用してデータ品質を管理する」を参照してください。
Azure Databricks に適用される制約
制約に違反すると、トランザクションはエラーで失敗します。 2 種類の制約がサポートされています。
NOT NULL
: 特定の列の値を null 値 にできないことを示します。CHECK
: 入力行ごとに指定されたブール式が true でなければならないことを示します。
重要
制約を追加すると、以前のライター バージョンが 3 未満の場合、テーブル ライター プロトコルのバージョンが自動的にアップグレードされます。 テーブル プロトコルのバージョン管理と、プロトコルのバージョンをアップグレードする意味については、「Azure Databricks で Delta Lake 機能の互換性を管理する方法」を参照してください。
Azure Databricks で NOT NULL
制約を設定する
テーブルを作成する場合は、スキーマで NOT NULL
制約を指定します。 ALTER TABLE ALTER COLUMN
コマンドを使用して NOT NULL
制約を削除または追加します。
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
制約を追加する前に、Azure Databricks は既存のすべての行が制約を満たしているかどうかを検証します。
構造体内で入れ子になっている列に対して NOT NULL
制約を指定すると、親の構造体も not null になります。 配列型またはマップ型内で入れ子になっている列は、NOT NULL
制約を受け入れません。
「CREATE TABLE [USING]」と「ALTER TABLE ALTER COLUMN」を参照してください。
Azure 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;
CHECK 制約を無効にする
Databricks Runtime 15.4 LTS 以降では、DROP FEATURE
コマンドを使ってテーブルから CHECK 制約を削除し、テーブル プロトコルをダウングレードできます。
「Delta テーブル機能の削除」を参照してください。
主キーと外部キーのリレーションシップを宣言する
Note
- 主キー制約と外部キー制約は、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
を使用して、特定のカタログに対して制約がどのように適用されるかに関する詳細を取得できます。
参照トピック