This feature is available in Delta Lake 3.1.0 and above and is enabled using the
allowColumnDefaults writer table feature.
Delta enables the specification of default expressions for columns in Delta tables. When users write to these tables without explicitly providing values for certain columns, or when they explicitly use the DEFAULT SQL keyword for a column, Delta automatically generates default values for those columns.
This information is stored in the StructField corresponding to the column of interest.
Enabling default column values for a table upgrades the Delta table version as a byproduct of enabling table features. This protocol upgrade is irreversible. Tables with default column values enabled can only be read in Delta Lake 3.1 and above.
You can enable default column values for a table by setting
ALTER TABLE <table_name> SET TBLPROPERTIES (
'delta.feature.allowColumnDefaults' = 'enabled'
For SQL commands that perform table writes, such as
DEFAULTkeyword resolves to the most recently assigne default value for the corresponding column (or NULL if no default value exists). For instance, the following SQL command will use the default value for the second column in the table:
INSERT INTO t VALUES (16, DEFAULT);
It is also possible for INSERT commands to specify lists of fewer column than the target table, in which case the engine will assign default values for the remaining columns (or NULL for any columns where no defaults yet exist).
The metadata discussed here apply solely to write operations, not read operations.
ALTER TABLE ... ADD COLUMNcommand that introduces a new column to an existing table may not to specify a default value for the new column. For instance, the following SQL command is not supported in Delta Lake:
ALTER TABLE t ADD COLUMN c INT DEFAULT 16;
It is permissible, however, to assign or update default values for columns that were created in previous commands. For example, the following SQL command is valid:
ALTER TABLE t ALTER COLUMN c SET DEFAULT 16;