Azure Databricks 上的所有约束都需要 Delta Lake。
Delta Live Tables 有一个类似的概念,称为预期。 请参阅
使用 Delta Live Tables 管理数据质量
。
在 Azure Databricks 上强制实施约束
当违反约束时,事务将失败并出现错误。 支持两种类型的约束:
NOT NULL
:指示特定列中的值不能为 null。
CHECK
:指示每个输入行的指定的布尔表达式必须为 true。
如果之前的编写器版本小于 3,则添加约束会自动升级表写入器协议版本。 请参阅
Azure Databricks 如何管理 Delta Lake 功能兼容性?
,了解表协议版本控制以及升级协议版本意味着什么。
在 Azure Databricks 中设置
NOT NULL
约束
SET NOT NULL
适用于 Databricks Runtime 7.4 和更高版本。
在创建表时,在架构中指定
NOT NULL
约束。 使用
ALTER TABLE ALTER COLUMN
命令删除或添加
NOT NULL
约束。
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
) USING DELTA;
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
在向表添加 NOT NULL 约束之前,Azure Databricks 会验证所有现有行是否都满足约束。
如果在结构中嵌套的列上指定了 NOT NULL 约束,则父结构也必须不为 null。 在数组或映射类型中嵌套的列不接受 NOT NULL 约束。
请参阅 CREATE TABLE [USING] 和 ALTER TABLE ALTER COLUMN。
在 Azure Databricks 中设置 CHECK 约束
适用于 Databricks Runtime 7.4 及更高版本。
在 Databricks Runtime 7.3 LTS 中,你可以写入已定义 CHECK 约束的表,但不能创建 CHECK 约束。
使用 ALTER TABLE ADD CONSTRAINT 和 ALTER TABLE DROP CONSTRAINT 命令管理 CHECK 约束。 在将约束添加到表中之前,ALTER TABLE ADD CONSTRAINT 会验证所有现有行是否满足约束。
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
) USING DELTA;
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。
CHECK 约束在 DESCRIBE DETAIL 和 SHOW TBLPROPERTIES 命令的输出中以表属性的形式公开。
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
声明主键和外键关系
此功能目前以公共预览版提供。
主键和外键约束在 Databricks Runtime 11.1 及更高版本中可用。
主键和外键约束需要 Unity Catalog 和 Delta Lake。
可以在 Unity Catalog 表中的字段上使用主键和外键关系。 主键和外键仅供参考,不会被强制执行。 外键必须引用另一个表中的主键。
在表创建过程中,可以将主键和外键声明为表规范子句的一部分。 在 CTAS 语句期间,不允许使用此子句。 还可以向现有表添加约束。
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 来获取有关如何在给定目录中应用约束的详细信息。
ALTER TABLE
ADD CONSTRAINT
DROP CONSTRAINT
CONSTRAINT 子句