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 CONSTRAINT 與 ALTER 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;