跳到内容

Delta 默认列值

Delta 允许为 Delta 表中的列指定默认表达式。当用户在写入这些表时未明确提供某些列的值,或者当他们明确为某个列使用 DEFAULT SQL 关键字时,Delta 会自动为这些列生成默认值。

此信息存储在对应于相关列的StructField中。

您可以通过将 delta.feature.allowColumnDefaults 设置为 enabled 来为表启用默认列值

ALTER TABLE <table_name> SET TBLPROPERTIES (
'delta.feature.allowColumnDefaults' = 'enabled'
)
  • 对于执行表写入的 SQL 命令,例如 INSERTUPDATEMERGE 命令,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;