Databricks の制約

Databricks では、標準の SQL 制約管理句がサポートされています。 制約は、次の 2 つのカテゴリに分類されます。

  • 強制制約により、テーブルに追加されたデータの品質と整合性が自動的に検証されます。

  • 情報主キー制約と外部キー制約は、テーブル内のフィールド間のリレーションシップをエンコードし、強制されません。

Databricks に対するすべての制約には、 Delta Lakeが必要です。

Delta Live Tables には、エクスペクテーションと呼ばれる同様の概念があります。 Delta Live Tablesを使用したデータ品質の管理を参照してください。

Databricks に対する制約の適用

制約に違反すると、トランザクションはエラーで失敗します。 次の 2 種類の制約がサポートされています。

  • NOT NULL: 特定の列の値を null にできないことを示します。

  • CHECK: 指定された Boolean 式が各入力行に対して 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列の変更」を参照してください。

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;

「テーブルの追加制約の変更」および 「テーブル の削除制約の変更」を参照してください。

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コマンドを使用してテーブルからチェック制約を削除し、テーブル プロトコルをダウングレードできます。

Drop 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 を使用して、特定のカタログに制約がどのように適用されるかに関する詳細を取得できます。

見る: