次の方法で共有


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 NULLconstraint を追加する前に、Azure Databricks は、既存のすべての行が constraintを満たすことを確認します。

構造体内の入れ子になった column に NOT NULLconstraint を指定する場合、親構造体も 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 CONSTRAINTALTER 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できます。

参照トピック