說明
詳細內容請參考Databricks官網文章:約束條件
注意
在Databricks Runtime 7.4及更高版本中可用。
Delta表支持標準的SQL約束管理子句,以確保自動驗證添加到表中的數據的質量和完整性。當違反約束時,Delta Lake會拋出一個InvariantViolationException信號,表示無法添加新數據。
支持兩種類型的約束:
NOT NULL:表示特定列中的值不能為Null。
CHECK:表示每個輸入行的指定布爾表達式必須為true
NOT NULL約束
您在創建表時在架構中指定約束,然后使用命令刪除約束。
NOT NULLNOT NULLALTER TABLE CHANGE COLUMN。
SQL
%sql
CREATE TABLE events(
id LONG NOT NULL,
date STRING NOT NULL,
location STRING,
description STRING
);
ALTER TABLE events CHANGE COLUMN date DROP NOT NULL;
您可以使用以下命令對添加到現有的Delta表進行約束。NOT NULLALTER TABLE CHANGE COLUMN
SQL
%sql
CREATE TABLE events(
id LONG,
date STRING,
location STRING,
description STRING
);
ALTER TABLE events CHANGE COLUMN id SET NOT NULL;
如果在嵌套在結構內的列上指定了約束,則父結構也將約束為不為Null。嵌套在數組或映射類型內的列不接受約束。NOT NULLNOT NULL
CHECK 約束
注意
在Databricks Runtime 7.4及更高版本中可用。
在Databricks Runtime 7.3中,您可以寫入已CHECK定義約束的表,但不能創建CHECK約束。
您可以CHECK使用和命令管理約束。在將其添加到表之前,驗證所有現有行均滿足約束。
ALTER TABLE ADD CONSTRAINTALTER TABLE DROP CONSTRAINTALTER TABLE ADD CONSTRAINT
SQL
%sql
CREATE TABLE events(
id LONG NOT NULL,
date STRING,
location STRING,
description STRING
);
ALTER TABLE events ADD CONSTRAINT dateWithinRange CHECK date > '1900-01-01';
ALTER TABLE events DROP CONSTRAINT dateWithinRange;
CHECK約束在和命令的輸出中顯示為表屬性。DESCRIBE DETAILSHOW TBLPROPERTIES
SQL
%sql
ALTER TABLE events ADD CONSTRAINT validIds CHECK (id > 1000 and id < 999999);
DESCRIBE DETAIL events;
文檔內容是否對您有幫助?