Azure Databricks 中的條件約束

Azure Databricks 支援標準的 SQL 限制管理子句:

  • 強制限制會在新增資料列前驗證資料完整性。
  • 資訊主鍵與外鍵約束定義資料表欄位間的關係,且不強制執行。

Azure Databricks 上的所有限制都必須依賴 Delta Lake。

關於 Lakeflow Spark 宣告式管線中的相關概念,請參見 「以管線期望管理資料品質」。

強制限制於Azure Databricks

違反條件約束時,交易會失敗並出現錯誤。 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
);

ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;

Azure Databricks 在向資料表加入 NOT NULL 約束前,驗證所有現有列都符合該限制。

如果您在結構內巢狀數據行上指定 NOT NULL 條件約束,父結構也必須不是 Null。 在陣列或映射類型中巢狀的欄位不接受 NOT NULL 約束。

請參閱 CREATE TABLE [USING]ALTER TABLE ALTER COLUMN

在 Azure Databricks 中設定 CHECK 條件約束

CHECK and ALTER TABLE ADD CONSTRAINT 指令管理ALTER TABLE DROP CONSTRAINT限制。 ALTER TABLE ADD CONSTRAINT 驗證所有現有列都滿足該限制,然後才將該限制加入表格。

以下限制適用於檢查約束條件:

  • CHECK限制表達式可以使用 Spark 中任何在相同參數值下總是回傳相同結果的 SQL 函式,但以下類型的函式除外:
    • 用戶定義函式。
    • 聚合函數。
    • 窗函數。
    • 傳回多個數據列的函式。

新增到現有表格

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

檢視檢查制約表的屬性

使用 DESCRIBE DETAIL and SHOW TBLPROPERTIES 指令來查看資料表的 CHECK 限制條件。

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 指令移除表格中的檢查約束並降級表格協定。

請參閱 刪除 Delta Lake 資料表功能和降級資料表協議

宣告主鍵和外鍵關聯性

主鍵與外鍵約束適用於 Databricks Runtime 13.3 LTS 及以上版本的 Unity Catalog 與 Delta Lake 資料表,且在 Databricks Runtime 15.2 及以上版本中為 GA。

主鍵和外鍵僅用於資訊,不會被強制執行。 外鍵必須參考另一個數據表中的主鍵。 資訊性金鑰約束可能透過 查詢優化提升效能。

請查詢 information_schema 或使用 DESCRIBE 取得特定目錄中限制套用的詳細資訊。

新增至新資料表

在建立資料表時,將主鍵與外鍵作為資料表規範子句的一部分宣告:

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);

CTAS 陳述不支援此限制條款。

新增到現有資料表

要對現有資料表新增限制:

ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;