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

  1. Remove or map the SymbolType column from the schema before conversion (project the schema without it).
  2. Upgrade to an Iceberg version whose Flink integration supports the type, or wait for upstream support.
  3. 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

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


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)