Azure Databricks 的條件約束

Azure Databricks 支持標準 SQL 條件約束管理子句。 條件約束分為兩個類別:

  • 強制限制可確保自動驗證新增至數據表的數據品質和完整性。
  • 數據表中欄位之間的資訊主鍵和外鍵條件約束會編碼關聯性,而且不會強制執行。

Azure Databricks 上的所有條件約束都需要 Delta Lake。

Delta Live Tables 有類似的概念,稱為預期。 請參閱 使用 Delta Live Tables 管理數據品質。

Azure Databricks 上的強制條件約束

違反條件約束時,交易會失敗並出現錯誤。 支援兩種類型的條件約束:

  • NOT NULL:表示特定數據行中的值不可以是 Null。
  • CHECK:表示每個輸入數據列的指定布爾表達式必須為 true。

重要

如果先前的寫入器版本小於 3,加入條件約束會自動升級數據表寫入器通訊協定版本。 請參閱 Azure Databricks 如何管理 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
) USING DELTA;

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 CONSTRAINTALTER 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
) USING DELTA;

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條件約束會在和 SHOW TBLPROPERTIES 命令的DESCRIBE DETAIL輸出中公開為數據表屬性。

ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

宣告主鍵和外鍵關聯性

重要

這項功能處於公開預覽狀態

注意

  • Databricks Runtime 11.3 LTS 和更新版本提供主鍵和外鍵條件約束。
  • 主鍵和外鍵條件約束需要 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 來取得如何跨指定目錄套用條件約束的詳細數據。

請參閱: