{"record":{"id":"dead7c209bfb4c52","repo":"apache/iceberg","slug":"unsupported-type-type-dead7c","errorCode":null,"errorMessage":"Unsupported type: \" + type","messagePattern":"Unsupported type: \" \\+ type","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/formats/avro/RowDataToAvroConverters.java","lineNumber":223,"sourceCode":"                  } else {\n                    // Iceberg: Added support for nanoseconds precision (FLINK-39251)\n                    return instant.getEpochSecond() * 1_000_000_000L + instant.getNano();\n                  }\n                }\n              };\n        }\n        break;\n        // Iceberg: Added support for nanoseconds precision (FLINK-39251)\n      case TIMESTAMP_WITH_LOCAL_TIME_ZONE:\n        final int ltzPrecision;\n        if (type instanceof org.apache.flink.table.types.logical.LocalZonedTimestampType) {\n          ltzPrecision =\n              ((org.apache.flink.table.types.logical.LocalZonedTimestampType) type).getPrecision();\n        } else {\n          ltzPrecision = 3;\n        }\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                  TimestampData timestampData = (TimestampData) object;\n                  if (ltzPrecision <= 3) {\n                    return timestampData.getMillisecond();\n                  } else if (ltzPrecision <= 6) {\n                    return timestampData.getMillisecond() * 1000L\n                        + timestampData.getNanoOfMillisecond() / 1000;\n                  } else {\n                    // Iceberg: Added support for nanoseconds precision (FLINK-39251)\n                    return timestampData.getMillisecond() * 1_000_000L\n                        + timestampData.getNanoOfMillisecond();\n                  }","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/formats/avro/RowDataToAvroConverters.java#L205-L241","documentation":"RowDataToAvroConverters.createConverter (public) builds RowData-to-Avro converters. For TIMESTAMP_WITH_LOCAL_TIME_ZONE with legacyTimestampMapping=true, no Avro encoder path exists, so it throws UnsupportedOperationException(\"Unsupported type: \" + type). Legacy timestamp mapping cannot serialize local-zoned timestamps to Avro.","triggerScenarios":"Writing RowData to Avro (e.g. Avro serialization format or Iceberg Avro file writer) when the schema contains TIMESTAMP_WITH_LOCAL_TIME_ZONE and legacy timestamp mapping is enabled — the ltzPrecision lookup shows the type reached the LTZ branch but legacy mode is on.","commonSituations":"Jobs configured with legacy timestamp mapping (pre-FLIP-278 options) writing timestamp-with-local-time-zone columns; tables/options migrated from older Flink versions retaining legacy config.","solutions":["Disable legacy timestamp mapping so the non-legacy LTZ converter is used.","Change the column to TIMESTAMP_WITHOUT_TIME_ZONE if timezone semantics allow.","Convert the RowData field (e.g. to a long epoch value) before Avro serialization."],"exampleFix":"// before\n// legacyTimestampMapping=true, column TIMESTAMP_WITH_LOCAL_TIME_ZONE(6)\n// after\n// set legacy timestamp mapping off (or use DataTypes.TIMESTAMP_WITHOUT_TIME_ZONE(6))","handlingStrategy":"validation","validationCode":"// before writing, reject LTZ columns under legacy mapping\nif (legacyTimestampMapping && rowType.getTypeAt(i) instanceof LocalZonedTimestampType) { throw new IllegalArgumentException(\"Disable legacy timestamp mapping to write TIMESTAMP_WITH_LOCAL_TIME_ZONE to Avro\"); }","typeGuard":null,"tryCatchPattern":"try { avroConverter.convert(rowData); } catch (UnsupportedOperationException e) { /* disable legacy mapping or convert the column first */ }","preventionTips":["Turn off legacy timestamp mapping for any job writing LTZ columns to Avro.","Migrate legacy table options during upgrades.","Prefer TIMESTAMP(ltz=false) or long-epoch fields under legacy configs."],"tags":["flink","avro","timestamp","legacy-mapping"],"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"}