共用方式為


Azure Databricks 中的條件約束

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

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

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

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

Azure Databricks 上的強制條件約束

違反 constraint 時,交易會失敗併發生錯誤。 支援兩種類型的條件約束:

  • NOT NULL:表示特定 columns 中的 values 不能為 null。
  • CHECK:表示每個輸入數據列的指定布爾表達式必須為 true。

重要

如果先前的寫入器版本小於 3,新增 constraint 會自動升級 table 寫入器通訊協定版本。 請參閱 Azure Databricks 如何管理 Delta Lake 功能相容性? 瞭解 table 通訊協定版本控制,以及升級通訊協定版本的意義。

在 Azure Databricks 中 SetNOT NULLconstraint

當您建立 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;

NOT NULLconstraint 新增至 table之前,Azure Databricks 會確認所有現有的數據列都符合 constraint。

如果您在結構體內的 column 上指定 NOT NULLconstraint,則父結構體也必須不是 null。 Columns 巢狀於數列或映射類型中不接受 NOT NULL 約束。

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

在 Azure Databricks 中 Set 和 CHECKconstraint

您可以使用和 命令來管理CHECK條件約束ALTER TABLE ADD CONSTRAINTALTER TABLE DROP CONSTRAINT ALTER TABLE ADD CONSTRAINT 會先確認所有現有的數據列都符合 constraint,再將它新增至 table。

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 DETAILSHOW TBLPROPERTIES 命令的輸出中公開為 table 屬性。

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 命令來 remove 檢查 table 的條件約束,並降級 table 通訊協定。

請參閱 Drop Delta table 的功能。

宣告主鍵和外鍵關聯性

注意

  • Databricks Runtime 11.3 LTS 和更新版本提供主鍵和外鍵條件約束,且在 Databricks Runtime 15.2 和更新版本中完全正式運作。
  • 主鍵和外鍵條件約束需要 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 來 get 怎麼在 catalog上套用條件約束的相關細節。

請參閱: