{"record":{"id":"58c30b47aced903d","repo":"apache/iceberg","slug":"cannot-apply-unknown-modify-column-position-change","errorCode":null,"errorMessage":"Cannot apply unknown modify-column-position change: ","messagePattern":"Cannot apply unknown modify-column-position change: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/util/FlinkAlterTableUtil.java","lineNumber":241,"sourceCode":"          (TableChange.ModifyColumnComment) modifyColumn;\n      pendingUpdate.updateColumnDoc(\n          modifyComment.getOldColumn().getName(), modifyComment.getNewComment());\n    } else {\n      throw new UnsupportedOperationException(\n          \"Cannot apply unknown modify-column change: \" + modifyColumn);\n    }\n  }\n\n  private static void applyModifyColumnPosition(\n      UpdateSchema pendingUpdate, TableChange.ModifyColumnPosition modifyColumnPosition) {\n    TableChange.ColumnPosition newPosition = modifyColumnPosition.getNewPosition();\n    if (newPosition instanceof TableChange.First) {\n      pendingUpdate.moveFirst(modifyColumnPosition.getOldColumn().getName());\n    } else if (newPosition instanceof TableChange.After) {\n      TableChange.After after = (TableChange.After) newPosition;\n      pendingUpdate.moveAfter(modifyColumnPosition.getOldColumn().getName(), after.column());\n    } else {\n      throw new UnsupportedOperationException(\n          \"Cannot apply unknown modify-column-position change: \" + modifyColumnPosition);\n    }\n  }\n\n  private static void applyUniqueConstraint(\n      UpdateSchema pendingUpdate, UniqueConstraint constraint) {\n    switch (constraint.getType()) {\n      case PRIMARY_KEY:\n        pendingUpdate.setIdentifierFields(constraint.getColumns());\n        break;\n      case UNIQUE_KEY:\n        throw new UnsupportedOperationException(\n            \"Unsupported table change: setting unique key constraints.\");\n      default:\n        throw new UnsupportedOperationException(\n            \"Cannot apply unknown unique constraint: \" + constraint.getType().name());\n    }\n  }","sourceCodeStart":223,"sourceCodeEnd":259,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/util/FlinkAlterTableUtil.java#L223-L259","documentation":"Guard in FlinkAlterTableUtil.applyModifyColumnPosition: while processing a column-position change (FIRST/AFTER/...), the specific position kind did not match any known TableChange.ColumnPosition branch. The appended value is the modifyColumn change; it signals a new Flink position variant this utility does not yet translate.","triggerScenarios":"A TableChange.ModifyColumnPosition (or AddColumn with position) whose new position is neither First nor After reaching applyModifyColumnPosition.","commonSituations":"DDL generators that emit `ALTER TABLE ... MODIFY col BEFORE other_col`; engines/tooling assuming Iceberg supports Before positioning via the Flink path.","solutions":["Rewrite the DDL to express the position with AFTER (reference the preceding column) or FIRST","Convert BEFORE X into AFTER (column preceding X) before applying changes","Skip the repositioning change if column order is not critical"],"exampleFix":"// before\nALTER TABLE t MODIFY COLUMN col BEFORE other_col;\n// after\nALTER TABLE t MODIFY COLUMN col AFTER col_preceding_other_col;","handlingStrategy":"validation","validationCode":"if (c instanceof TableChange.ModifyColumnPosition) {\n  TableChange.ColumnPosition pos = ((TableChange.ModifyColumnPosition) c).newPosition();\n  if (!(pos instanceof TableChange.First) && !(pos instanceof TableChange.After)) {\n    throw new IllegalArgumentException(\"Only FIRST/AFTER positions supported\");\n  }\n}","typeGuard":"boolean isSupportedPosition(TableChange.ColumnPosition pos) {\n  return pos instanceof TableChange.First || pos instanceof TableChange.After;\n}","tryCatchPattern":"try {\n  FlinkAlterTableUtil.applySchemaChanges(table, changes);\n} catch (UnsupportedOperationException e) {\n  // rewrite BEFORE into AFTER of the preceding column and retry\n}","preventionTips":["Express column placement with FIRST or AFTER only","Convert BEFORE clauses at the DDL-translation layer","Avoid relying on column order where possible"],"tags":["flink","ddl","columns"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}