{"record":{"id":"00c6e131d38813b2","repo":"apache/iceberg","slug":"unsupported-symboltype-00c6e1","errorCode":null,"errorMessage":"Unsupported SymbolType.","messagePattern":"Unsupported SymbolType\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java","lineNumber":73,"sourceCode":"\n  @Override\n  public T visit(StructuredType structuredType) {\n    throw new UnsupportedOperationException(\"Unsupported StructuredType.\");\n  }\n\n  @Override\n  public T visit(NullType nullType) {\n    throw new UnsupportedOperationException(\"Unsupported NullType.\");\n  }\n\n  @Override\n  public T visit(RawType<?> rawType) {\n    throw new UnsupportedOperationException(\"Unsupported RawType.\");\n  }\n\n  @Override\n  public T visit(SymbolType<?> symbolType) {\n    throw new UnsupportedOperationException(\"Unsupported SymbolType.\");\n  }\n\n  @Override\n  public T visit(LogicalType other) {\n    throw new UnsupportedOperationException(\"Unsupported type: \" + other);\n  }\n}\n","sourceCodeStart":55,"sourceCodeEnd":81,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java#L55-L81","documentation":"FlinkTypeVisitor throws UnsupportedOperationException when a visitor callback encounters an Iceberg type that has no Flink mapping. SymbolType (used for parameterized/placeholder types like VarChar parameterization in newer type specs) is explicitly not supported by the Flink conversion path. This is an intentional guard: the visitor cannot produce a meaningful Flink LogicalType for it.","triggerScenarios":"Calling FlinkTypeToType / TypeToFlinkType conversion (directly or via FlinkSchemaUtil.convert) on a schema containing an Iceberg Types.SymbolType node, typically from schemas created programmatically with unknown/placeholder types.","commonSituations":"Schemas produced by newer table format versions or other engines (e.g. variants/unknown types) being converted to Flink types; custom catalogs returning exotic types; version-skew where the schema was written by a newer Iceberg/Spark that supports SymbolType.","solutions":["Remove or map the SymbolType column from the schema before conversion (project the schema without it).","Upgrade to an Iceberg version whose Flink integration supports the type, or wait for upstream support.","Handle the type yourself by extending the visitor logic instead of calling the generic convert path."],"exampleFix":"// before\nLogicalType flink = FlinkSchemaUtil.convert(schema); // throws on SymbolType\n// after\nSchema pruned = new Schema(schema.columns().stream()\n    .filter(c -> !(c.type() instanceof Types.SymbolType))\n    .collect(Collectors.toList()));\nLogicalType flink = FlinkSchemaUtil.convert(pruned);","handlingStrategy":"validation","validationCode":"boolean hasUnsupported = schema.columns().stream().anyMatch(c -> c.type() instanceof Types.SymbolType);\nif (hasUnsupported) throw new IllegalStateException(\"Schema contains SymbolType unsupported by Flink conversion\");","typeGuard":"boolean isConvertible(Type t) { return !(t instanceof Types.SymbolType); }","tryCatchPattern":"try { FlinkSchemaUtil.convert(schema); } catch (UnsupportedOperationException e) { /* fallback: prune unsupported columns */ }","preventionTips":["Filter SymbolType columns before schema conversion","Keep the flink connector and core Iceberg versions aligned","Log schema types during conversion in dev environments"],"tags":["flink","type-conversion","unsupported-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-23T08:17:48.524Z"}