{"record":{"id":"7edd0694d04141bf","repo":"apache/iceberg","slug":"unsupported-logical-type-7edd06","errorCode":null,"errorMessage":"Unsupported logical type: ","messagePattern":"Unsupported logical type: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java","lineNumber":193,"sourceCode":"    }\n\n    private ParquetValueWriter<?> newOption(Type fieldType, ParquetValueWriter<?> writer) {\n      int maxD = type.getMaxDefinitionLevel(path(fieldType.getName()));\n      return ParquetValueWriters.option(fieldType, maxD, writer);\n    }\n\n    @Override\n    public ParquetValueWriter<?> primitive(LogicalType fType, PrimitiveType primitive) {\n      ColumnDescriptor desc = type.getColumnDescription(currentPath());\n\n      LogicalTypeAnnotation annotation = primitive.getLogicalTypeAnnotation();\n      if (annotation != null) {\n        Optional<ParquetValueWriter<?>> writer =\n            annotation.accept(new LogicalTypeWriterBuilder(fType, desc));\n        if (writer.isPresent()) {\n          return writer.get();\n        } else {\n          throw new UnsupportedOperationException(\n              \"Unsupported logical type: \" + primitive.getOriginalType());\n        }\n      }\n\n      switch (primitive.getPrimitiveTypeName()) {\n        case FIXED_LEN_BYTE_ARRAY:\n        case BINARY:\n          return byteArrays(desc);\n        case BOOLEAN:\n          return ParquetValueWriters.booleans(desc);\n        case INT32:\n          return ints(fType, desc);\n        case INT64:\n          return ParquetValueWriters.longs(desc);\n        case FLOAT:\n          return ParquetValueWriters.floats(desc);\n        case DOUBLE:\n          return ParquetValueWriters.doubles(desc);","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java#L175-L211","documentation":"FlinkParquetWriters' LogicalTypeWriterBuilder implements Parquet's LogicalTypeAnnotationVisitor; when a Parquet logical type annotation has no visit method mapped to a writer, the default branch throws UnsupportedOperationException 'Unsupported logical type: <name>'. Only annotations the builder explicitly supports (decimal, timestamp, string, etc.) can be written.","triggerScenarios":"Writing Flink data to Iceberg Parquet files where a column's Parquet LogicalTypeAnnotation (e.g. interval, JSON, BSON, or unknown annotations) is visited with no matching writer.","commonSituations":"Mapping Flink/other-engine logical types that have no Parquet-annotation representation Iceberg supports, e.g. trying to write an INTERVAL column, or files with exotic annotations from external producers.","solutions":["Change the column to a supported type (string, decimal, timestamp) before writing","Drop or transform unsupported logical-type columns in the pipeline","Upgrade Iceberg if support for the annotation was added in a newer release"],"exampleFix":"// before\n DataTypes.STRING().bridgedTo(JSON.class) // exotic annotation\n// after\n DataTypes.STRING() // plain string annotation, supported","handlingStrategy":"try-catch","validationCode":"LogicalTypeAnnotation ann = desc.getPrimitiveType().getLogicalTypeAnnotation();\nif (ann != null && !SUPPORTED_ANNOTATIONS.test(ann)) {\n  throw new SchemaException(\"Unsupported logical type: \" + ann);\n}","typeGuard":null,"tryCatchPattern":"try {\n  writer = logicalTypeWriterBuilder.visit(annotation).orElseThrow(...);\n} catch (UnsupportedOperationException e) {\n  throw new WriteException(\"Unsupported Parquet logical type: \" + e.getMessage(), e);\n}","preventionTips":["Use only types with standard Parquet annotations (string, decimal, timestamp)","Avoid exotic types like interval in Iceberg pipelines","Test schema round-trips before production writes"],"tags":["flink","parquet","logical-type"],"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"}