{"record":{"id":"157fecbac86841cd","repo":"apache/iceberg","slug":"cannot-add-column-s-since-setting-default-values","errorCode":null,"errorMessage":"Cannot add column %s since setting default values in Spark is currently unsupported","messagePattern":"Cannot add column (.+?) since setting default values in Spark is currently unsupported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java","lineNumber":238,"sourceCode":"      TableChange.After after = (TableChange.After) update.position();\n      String referenceField = peerName(update.fieldNames(), after.column());\n      pendingUpdate.moveAfter(DOT.join(update.fieldNames()), referenceField);\n\n    } else if (update.position() instanceof TableChange.First) {\n      pendingUpdate.moveFirst(DOT.join(update.fieldNames()));\n\n    } else {\n      throw new IllegalArgumentException(\"Unknown position for reorder: \" + update.position());\n    }\n  }\n\n  private static void apply(UpdateSchema pendingUpdate, TableChange.AddColumn add) {\n    Preconditions.checkArgument(\n        add.isNullable(),\n        \"Incompatible change: cannot add required column: %s\",\n        leafName(add.fieldNames()));\n    if (add.defaultValue() != null) {\n      throw new UnsupportedOperationException(\n          String.format(\n              \"Cannot add column %s since setting default values in Spark is currently unsupported\",\n              leafName(add.fieldNames())));\n    }\n\n    Type type = SparkSchemaUtil.convert(add.dataType());\n    pendingUpdate.addColumn(\n        parentName(add.fieldNames()), leafName(add.fieldNames()), type, add.comment());\n\n    if (add.position() instanceof TableChange.After) {\n      TableChange.After after = (TableChange.After) add.position();\n      String referenceField = peerName(add.fieldNames(), after.column());\n      pendingUpdate.moveAfter(DOT.join(add.fieldNames()), referenceField);\n\n    } else if (add.position() instanceof TableChange.First) {\n      pendingUpdate.moveFirst(DOT.join(add.fieldNames()));\n\n    } else {","sourceCodeStart":220,"sourceCodeEnd":256,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java#L220-L256","documentation":"Iceberg's Spark DDL integration in this version cannot set column default values when adding columns. If a TableChange.AddColumn carries a non-null defaultValue, an UnsupportedOperationException naming the column is thrown.","triggerScenarios":"CREATE/ALTER TABLE adding a column with a DEFAULT clause (Spark 3.4+ DEFAULT syntax or SQL pipe syntax), producing an AddColumn change with a non-null default value.","commonSituations":"Migrating Delta/Hive DDL with DEFAULT column values to Iceberg on Spark 3.4/3.5; ORC/Parquet-generated schemas including defaults.","solutions":["Remove the DEFAULT clause and add the column without a default","Add the column, then backfill existing/default rows with UPDATE","Upgrade to an Iceberg version that supports column default values (schema spec 'defaults' support)"],"exampleFix":"// before\nALTER TABLE t ADD COLUMN c INT DEFAULT 42;\n// after\nALTER TABLE t ADD COLUMN c INT;","handlingStrategy":"type-guard","validationCode":"boolean hasDefaults = changes.stream().filter(c -> c instanceof TableChange.AddColumn).map(c -> (TableChange.AddColumn) c).anyMatch(a -> a.defaultValue() != null);\nif (hasDefaults) throw new IllegalArgumentException(\"column defaults unsupported by this Iceberg Spark version\");","typeGuard":"boolean addColumnHasDefault(TableChange c) { return c instanceof TableChange.AddColumn && ((TableChange.AddColumn) c).defaultValue() != null; }","tryCatchPattern":"try { Spark3Util.applySchemaChanges(table, changes); } catch (UnsupportedOperationException e) { if (e.getMessage().contains(\"setting default values\")) { /* strip defaults and retry */ } else throw e; }","preventionTips":["Avoid DEFAULT clauses in Iceberg DDL unless your Iceberg version supports them","Add columns plainly, then backfill values via UPDATE","Check release notes for column default support before migrating Delta/Hive DDL"],"tags":["spark","ddl","default-value","unsupported"],"backgroundTag":"operation-not-supported","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}