{"record":{"id":"0fd5d67cf7624c58","repo":"apache/seatunnel","slug":"old-and-new-belongs-to-the-same","errorCode":null,"errorMessage":"old: {{}-{}} and new: {{}-{}} belongs to the same type family, but old type has higher precision than new type. Ignore this convert request.","messagePattern":"old: (.+?)-(.+?)\\} and new: (.+?)-(.+?)\\} belongs to the same type family, but old type has higher precision than new type\\. Ignore this convert request\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/schema/handler/AlterPaimonTableSchemaEventHandler.java","lineNumber":175,"sourceCode":"    private void updateColumn(\n            Column newColumn, String oldColumnName, Identifier identifier, String afterTheColumn) {\n        BasicTypeDefine<DataType> reconvertColumn = PaimonTypeMapper.INSTANCE.reconvert(newColumn);\n        int idx = sinkPaimonTableSchema.fieldNames().indexOf(oldColumnName);\n        Preconditions.checkState(\n                idx >= 0,\n                \"Field name \" + oldColumnName + \" does not exist in table. This is unexpected.\");\n        DataType newDataType = reconvertColumn.getNativeType();\n        DataField dataField = sinkPaimonTableSchema.fields().get(idx);\n        DataType oldDataType = dataField.type();\n        switch (canConvert(oldDataType, newDataType)) {\n            case CONVERT:\n                paimonCatalog.alterTable(\n                        identifier,\n                        SchemaChange.updateColumnType(oldColumnName, newDataType),\n                        false);\n                break;\n            case IGNORE:\n                log.warn(\n                        \"old: {{}-{}} and new: {{}-{}} belongs to the same type family, but old type has higher precision than new type. Ignore this convert request.\",\n                        dataField.name(),\n                        oldDataType,\n                        reconvertColumn.getName(),\n                        newDataType);\n                break;\n            case EXCEPTION:\n                throw new UnsupportedOperationException(\n                        String.format(\n                                \"Cannot convert field %s from type %s to %s of Paimon table %s.\",\n                                oldColumnName, oldDataType, newDataType, identifier.getFullName()));\n        }\n        if (StringUtils.isNotBlank(afterTheColumn)) {\n            paimonCatalog.alterTable(\n                    identifier,\n                    SchemaChange.updateColumnPosition(\n                            SchemaChange.Move.after(oldColumnName, afterTheColumn)),\n                    false);","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/schema/handler/AlterPaimonTableSchemaEventHandler.java#L157-L193","documentation":"AlterPaimonTableSchemaEventHandler.updateColumn decides whether an existing column can be widened to the requested new SeaTunnel type. When old and new types share a family (e.g. INT->TINYINT direction, DECIMAL narrower) but the old type has HIGHER precision than the new, narrowing is unsafe, the handler marks it IGNORE and logs this warning instead of altering the table.","triggerScenarios":"applySingleSchemaChangeEvent with an AlterTableColumn event whose new column type converts (via reconvert) into the same Paimon type family but with lower precision — resolution is IGNORE.","commonSituations":"Upstream schema evolution sends DECIMAL(20,4) where table has DECIMAL(30,6); source changed BIGINT back to INT; automated schema-sync tools pushing older DDL.","solutions":["Verify the narrowing is intended; if not, fix the upstream event to send an equal-or-wider type.","If truly intended, alter the Paimon table manually: ALTER TABLE ... ALTER COLUMN c TYPE new_type, or drop/re-add the column.","Set the schema-evolution handler policy to allow/upper-type if your pipeline tolerates widening only.","Skip the event by filtering it in the schema-change producer so the warning disappears."],"exampleFix":"// before\nALTER COLUMN amount TYPE DECIMAL(10,2)  // table column is DECIMAL(20,4)\n// after\nALTER COLUMN amount TYPE DECIMAL(20,4)  // equal or wider type, change applied","handlingStrategy":"validation","validationCode":"if (newType.getPrecision() < oldType.getPrecision()) log.warn(\"narrowing request will be ignored for column \" + col);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only emit widening type changes from upstream","Align schema-registry DDL with table DDL","Manually alter table when narrowing is truly required"],"tags":["paimon","schema-evolution","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}