约束条件

说明

详细内容请参考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;
CHECK 约束