apache/iceberg · error · UnsupportedOperationException
Unsupported SymbolType.
Error message
Unsupported SymbolType.
What it means
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.
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.
Example fix
// before
LogicalType flink = FlinkSchemaUtil.convert(schema); // throws on SymbolType
// after
Schema pruned = new Schema(schema.columns().stream()
.filter(c -> !(c.type() instanceof Types.SymbolType))
.collect(Collectors.toList()));
LogicalType flink = FlinkSchemaUtil.convert(pruned); Defensive patterns
Strategy: validation
Validate before calling
boolean hasUnsupported = schema.columns().stream().anyMatch(c -> c.type() instanceof Types.SymbolType);
if (hasUnsupported) throw new IllegalStateException("Schema contains SymbolType unsupported by Flink conversion"); Type guard
boolean isConvertible(Type t) { return !(t instanceof Types.SymbolType); } Try / catch
try { FlinkSchemaUtil.convert(schema); } catch (UnsupportedOperationException e) { /* fallback: prune unsupported columns */ } Prevention
- Filter SymbolType columns before schema conversion
- Keep the flink connector and core Iceberg versions aligned
- Log schema types during conversion in dev environments
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Cannot convert unknown type to Flink:
- Unsupported DayTimeIntervalType.
- Unsupported DayTimeIntervalType.
- Unsupported DistinctType.
- Unsupported DistinctType.
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/00c6e131d38813b2.
Report an issue: GitHub.
Appendix: source
Thrown at flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java:73
@Override
public T visit(StructuredType structuredType) {
throw new UnsupportedOperationException("Unsupported StructuredType.");
}
@Override
public T visit(NullType nullType) {
throw new UnsupportedOperationException("Unsupported NullType.");
}
@Override
public T visit(RawType<?> rawType) {
throw new UnsupportedOperationException("Unsupported RawType.");
}
@Override
public T visit(SymbolType<?> symbolType) {
throw new UnsupportedOperationException("Unsupported SymbolType.");
}
@Override
public T visit(LogicalType other) {
throw new UnsupportedOperationException("Unsupported type: " + other);
}
}
View on GitHub (pinned to 86d9c8fc54)