{"record":{"id":"a075f7737b5f7a91","repo":"apache/iceberg","slug":"unsupported-table-change-modifywatermark","errorCode":null,"errorMessage":"Unsupported table change: ModifyWatermark.","messagePattern":"Unsupported table change: ModifyWatermark\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/util/FlinkAlterTableUtil.java","lineNumber":137,"sourceCode":"   *\n   * @param pendingUpdate an uncommitted UpdateSchema operation to configure\n   * @param schemaChanges a list of Flink table changes\n   */\n  public static void applySchemaChanges(\n      UpdateSchema pendingUpdate, List<TableChange> schemaChanges) {\n    for (TableChange change : schemaChanges) {\n      if (change instanceof TableChange.AddColumn) {\n        applyAddColumn(pendingUpdate, (TableChange.AddColumn) change);\n      } else if (change instanceof TableChange.ModifyColumn) {\n        TableChange.ModifyColumn modifyColumn = (TableChange.ModifyColumn) change;\n        applyModifyColumn(pendingUpdate, modifyColumn);\n      } else if (change instanceof TableChange.DropColumn) {\n        TableChange.DropColumn dropColumn = (TableChange.DropColumn) change;\n        pendingUpdate.deleteColumn(dropColumn.getColumnName());\n      } else if (change instanceof TableChange.AddWatermark) {\n        throw new UnsupportedOperationException(\"Unsupported table change: AddWatermark.\");\n      } else if (change instanceof TableChange.ModifyWatermark) {\n        throw new UnsupportedOperationException(\"Unsupported table change: ModifyWatermark.\");\n      } else if (change instanceof TableChange.DropWatermark) {\n        throw new UnsupportedOperationException(\"Unsupported table change: DropWatermark.\");\n      } else if (change instanceof TableChange.AddUniqueConstraint) {\n        TableChange.AddUniqueConstraint addPk = (TableChange.AddUniqueConstraint) change;\n        applyUniqueConstraint(pendingUpdate, addPk.getConstraint());\n      } else if (change instanceof TableChange.ModifyUniqueConstraint) {\n        TableChange.ModifyUniqueConstraint modifyPk = (TableChange.ModifyUniqueConstraint) change;\n        applyUniqueConstraint(pendingUpdate, modifyPk.getNewConstraint());\n      } else if (change instanceof TableChange.DropConstraint) {\n        throw new UnsupportedOperationException(\"Unsupported table change: DropConstraint.\");\n      } else {\n        throw new UnsupportedOperationException(\"Cannot apply unknown table change: \" + change);\n      }\n    }\n  }\n\n  private static void applyAddColumn(UpdateSchema pendingUpdate, TableChange.AddColumn addColumn) {\n    Column flinkColumn = addColumn.getColumn();","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/util/FlinkAlterTableUtil.java#L119-L155","documentation":"Guard in FlinkAlterTableUtil.applySchemaChanges: an ALTER TABLE change of type ModifyWatermark was received. Watermark specs are not part of Iceberg table schemas, so the change cannot be translated into an UpdateSchema operation and is rejected outright.","triggerScenarios":"Running `ALTER TABLE ... MODIFY WATERMARK` (or ALTER ... ADD/MODIFY watermark after drop) against a table backed by the Iceberg Flink catalog.","commonSituations":"Adjusting watermark delay on a table previously defined with a Flink-specific watermark; migrating table definitions between Flink catalogs.","solutions":["Remove the MODIFY WATERMARK clause","Handle watermark changes in the Flink job's WatermarkStrategy, not the catalog table","Split the ALTER statement so only supported changes are applied"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (changes.stream().anyMatch(c -> c instanceof TableChange.ModifyWatermark)) {\n  throw new IllegalArgumentException(\"Watermark changes are unsupported on Iceberg tables\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  FlinkAlterTableUtil.applySchemaChanges(table, changes);\n} catch (UnsupportedOperationException e) {\n  // handle watermark-related failure separately\n}","preventionTips":["Keep watermark configuration in WatermarkStrategy code","Strip watermark changes before schema application","Document that Iceberg tables hold no Flink watermarks"],"tags":["flink","ddl","watermark"],"backgroundTag":"unsupported-operation","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"}