Azure Databricks の制約
Azure Databricks では、標準の SQL constraint 管理句がサポートされています。 制約は 2 つのカテゴリに分けられます。
- 強制された制約により、table に追加されたデータの品質と完全性が自動的に確認されます。
- 情報主キー制約と外部キー制約は、tables 内のフィールド間のリレーションシップをエンコードし、適用されません。
Azure Databricks のすべての制約には Delta Lake が必要です。
Delta Live Tables には、期待値と呼ばれる同様の概念があります。 データ品質をパイプラインの期待値で管理する方法については、を参照してください。
Azure Databricks に適用される制約
constraint に違反すると、トランザクションはエラーで失敗します。 2 種類の制約がサポートされています。
NOT NULL
: 特定の columns の values を null にできないことを示します。CHECK
: 入力行ごとに指定されたブール式が true でなければならないことを示します。
重要
constraint を追加すると、以前のライター バージョンが 3 未満の場合、table ライター プロトコルバージョンが自動的にアップグレードされます。 「Azure Databricks で Delta Lake 機能の互換性を管理する方法」を参照してください。 プロトコルのバージョン管理 table 理解し、プロトコル バージョンをアップグレードする意味について説明します。
Azure Databricks で NOT NULL
constraintをSetする
tableを作成するときに、schema で 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;
tableに NOT NULL
constraint を追加する前に、Azure Databricks は、既存のすべての行が constraintを満たすことを確認します。
構造体内の入れ子になった column に NOT NULL
constraint を指定する場合、親構造体も null であってはなりません。 配列型またはマップ型の中にネストされた Columns は、NOT NULL
の制約を受け付けません。
「CREATE TABLE [USING]」と ALTER TABLE の ALTER COLUMN に関する説明をご覧ください。
Azure Databricks で CHECK
constraintをSetする
CHECK
制約を管理するには、 ALTER TABLE ADD CONSTRAINT
コマンドと ALTER TABLE DROP CONSTRAINT
コマンドを使用します。 ALTER TABLE ADD CONSTRAINT
は、tableに追加する前に、既存のすべての行が 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
コマンドの出力で table プロパティとして公開されます。
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
コマンドを使用して、table から制約を remove 確認し、table プロトコルをダウングレードできます。
ドロップデルタ table の機能を参照してください。
主キーと外部キーのリレーションシップを宣言する
Note
- 主キー制約と外部キー制約は、Databricks Runtime 11.3 LTS 以降で使用でき、Databricks Runtime 15.2 以降では完全に GA です。
- 主キーと外部キーの制約には、Unity Catalog と Delta Lake が必要です。
Unity Catalogtablesのフィールドで主キーと外部キーのリレーションシップを使用できます。 主キーと外部キーは情報提供のみを目的としており、適用されません。 外部キーは、別のtableの主キーを参照する必要があります。
table の作成時に、table 仕様句の一部として主キーと外部キーを宣言できます。 CTAS ステートメント時は、この句は使用できません。 既存の tablesに制約を追加することもできます。
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
を使って、特定のcatalogに対して制約がどのように適用されるかに関する詳細をgetできます。
参照トピック