Delta 默认列值
Delta 允许为 Delta 表中的列指定默认表达式。当用户在写入这些表时未明确提供某些列的值,或者当他们明确为某个列使用 DEFAULT SQL 关键字时,Delta 会自动为这些列生成默认值。
此信息存储在对应于相关列的StructField中。
如何启用 Delta Lake 默认列值
标题为“如何启用 Delta Lake 默认列值”的部分您可以通过将 delta.feature.allowColumnDefaults
设置为 enabled
来为表启用默认列值
ALTER TABLE <table_name> SET TBLPROPERTIES ( 'delta.feature.allowColumnDefaults' = 'enabled')
如何在 SQL 命令中使用默认列
标题为“如何在 SQL 命令中使用默认列”的部分-
对于执行表写入的 SQL 命令,例如
INSERT
、UPDATE
和MERGE
命令,DEFAULT
关键字将解析为相应列最近分配的默认值(如果不存在默认值,则为 NULL)。例如,以下 SQL 命令将使用表中第二列的默认值:INSERT INTO t VALUES (16, DEFAULT);
-
INSERT 命令还可以指定少于目标表的列列表,在这种情况下,引擎将为其余列分配默认值(对于尚不存在默认值的任何列,则为 NULL)。
-
将新列添加到现有表的
ALTER TABLE ... ADD COLUMN
命令可能不会为新列指定默认值。例如,Delta Lake 不支持以下 SQL 命令:ALTER TABLE t ADD COLUMN c INT DEFAULT 16;
-
但是,允许为在先前命令中创建的列分配或更新默认值。例如,以下 SQL 命令是有效的:
ALTER TABLE t ALTER COLUMN c SET DEFAULT 16;