Azure Databricks では、標準の SQL 制約管理句がサポートされています。 制約は 2 つのカテゴリに分けられます。
- 強制的な制約により、テーブルに追加されるデータの品質と整合性が自動的に検証されます。
- 情報主キー制約と外部キー制約は、テーブル内のフィールド間のリレーションシップをエンコードし、適用されません。
Azure Databricks のすべての制約には Delta Lake が必要です。
Lakeflow 宣言型パイプラインには、期待値と呼ばれる同様の概念があります。 データ品質をパイプラインの期待値で管理する方法については、を参照してください。
Azure Databricks に適用される制約
制約に違反すると、トランザクションはエラーで失敗します。 2 種類の制約がサポートされています。
-
NOT NULL
: 特定の列の値を null にできないことを示します。 -
CHECK
: 入力行ごとに指定されたブール式が true でなければならないことを示します。
重要
制約を追加すると、以前のライター バージョンが 3 未満の場合、テーブル ライター プロトコルのバージョンが自動的にアップグレードされます。 テーブル プロトコルのバージョン管理と、プロトコル バージョンをアップグレードする意味については、 Delta Lake の機能の互換性とプロトコル に関する記事を参照してください。
Azure 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
制約を追加する前に、Azure Databricks は、既存のすべての行が制約を満たすことを確認します。
構造体内に入れ子になった列に NOT NULL
制約を指定する場合、親構造体も 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 Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
主キーと外部キーのリレーションシップを宣言する
注
- 主キー制約と外部キー制約は、Databricks Runtime 11.3 LTS 以降で使用でき、Databricks Runtime 15.2 以降では完全に GA です。
- 主キーと外部キーの制約には、Unity カタログと Delta Lake が必要です。
Unity カタログ テーブルのフィールドでは、主キーと外部キーのリレーションシップを使用できます。 主キーと外部キーは情報提供のみを目的としており、適用されません。 外部キーは、別のテーブルの主キーを参照する必要があります。 情報キー制約は、クエリの最適化をサポートすることでパフォーマンス を向上させることができます。
テーブルの作成時に、テーブル指定句の一部として主キーと外部キーを宣言できます。 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
を使用して、特定のカタログに対する制約の適用方法の詳細を取得したりできます。
参照トピック