Delta默认列值
注意
此功能在Delta Lake 3.1.0及以上版本中可用,并通过allowColumnDefaults写入器表功能启用。
Delta支持为Delta表中的列指定默认表达式。当用户写入这些表时未明确为某些列提供值,或者明确对某列使用DEFAULT SQL关键字时,Delta会自动为这些列生成默认值。
此信息存储在对应目标列的StructField中。
如何启用Delta Lake默认列值
重要
为Delta表启用默认列值将升级其协议版本以支持表特性。此协议升级不可逆。启用了默认列值的表只能在Delta Lake 3.1及以上版本中进行写入。
您可以通过将delta.feature.allowColumnDefaults设置为enabled来为表启用默认列值:
ALTER TABLE <table_name> SET TBLPROPERTIES (
'delta.feature.allowColumnDefaults' = 'enabled'
)
如何在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;