{"record":{"id":"d0409c2c58fe322d","repo":"apache/flink","slug":"unsupported-type-d0409c","errorCode":null,"errorMessage":"Unsupported type: {}","messagePattern":"Unsupported type: (.+?)","errorType":"validation","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/RowDataToAvroConverters.java","lineNumber":189,"sourceCode":"                            };\n                } else {\n                    converter =\n                            new RowDataToAvroConverter() {\n                                private static final long serialVersionUID = 1L;\n\n                                @Override\n                                public Object convert(Schema schema, Object object) {\n                                    return ((TimestampData) object)\n                                            .toLocalDateTime()\n                                            .toInstant(ZoneOffset.UTC)\n                                            .toEpochMilli();\n                                }\n                            };\n                }\n                break;\n            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:\n                if (legacyTimestampMapping) {\n                    throw new UnsupportedOperationException(\"Unsupported type: \" + type);\n                } else {\n                    converter =\n                            new RowDataToAvroConverter() {\n                                private static final long serialVersionUID = 1L;\n\n                                @Override\n                                public Object convert(Schema schema, Object object) {\n                                    return ((TimestampData) object).toInstant().toEpochMilli();\n                                }\n                            };\n                }\n                break;\n            case DECIMAL:\n                converter =\n                        new RowDataToAvroConverter() {\n                            private static final long serialVersionUID = 1L;\n\n                            @Override","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/RowDataToAvroConverters.java#L171-L207","documentation":"RowDataToAvroConverters.createRowDataConverter refuses TIMESTAMP_WITH_LOCAL_TIME_ZONE when legacyTimestampMapping is true: legacy mode maps only TIMESTAMP WITHOUT TIME ZONE to Avro timestamp logical types; there is no legacy Avro representation for local-zoned timestamps, so converter construction fails.","triggerScenarios":"Serializing RowData that contains a TIMESTAMP_WITH_LOCAL_TIME_ZONE column to Avro while avro.timestamp.logical-type.mapping.legacy=true (constructor flag).","commonSituations":"Turning on legacy mapping for old-pipeline compatibility on tables that use CURRENT_TIMESTAMP/TIMESTAMP_LTZ columns; upgrades where the flag default changed.","solutions":["Set legacyTimestampMapping=false so TIMESTAMP_LTZ maps to local-timestamp logical types.","Or drop/convert the TIMESTAMP_LTZ column (CAST to TIMESTAMP or STRING) before the Avro sink if legacy mode must stay on."],"exampleFix":"-- before: table has ts_ltz TIMESTAMP(3) WITH LOCAL TIME ZONE, legacy mapping on\n-- after: either disable legacy mapping in format options, or\nSELECT CAST(ts_ltz AS TIMESTAMP(3)) AS ts FROM src;","handlingStrategy":"validation","validationCode":"boolean hasLtz = rowType.getFields().stream()\n        .anyMatch(f -> f.getType().is(LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE));\nif (hasLtz && legacyTimestampMapping) {\n    throw new IllegalArgumentException(\"Cannot serialize TIMESTAMP_LTZ with legacy Avro mapping; disable it or cast the column\");\n}","typeGuard":"static boolean ltzSerializable(RowType t, boolean legacy) {\n    return !legacy || t.getFields().stream()\n            .noneMatch(f -> f.getType().is(LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE));\n}","tryCatchPattern":null,"preventionTips":["Default legacy mapping to false; only enable after confirming no LTZ columns exist.","CAST TIMESTAMP_LTZ to STRING/TIMESTAMP before Avro sinks when legacy mode is mandatory."],"tags":["avro","flink","timestamp-ltz","legacy-mapping","serialization"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}