说明
详细内容请参考Databricks官网文章:
约束条件
注意
在Databricks Runtime 7.4及更高版本中可用。
Delta表支持标准的SQL约束管理子句,以确保自动验证添加到表中的数据的质量和完整性。当违反约束时,Delta Lake会抛出一个InvariantViolationException信号,表示无法添加新数据。
支持两种类型的约束:
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 约束
您可以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;