apache/iceberg · error · ValidationException
Not a supported type: %s
Error message
Not a supported type: %s
What it means
DeltaLakeTypeToType.atomic converts Delta primitive types to Iceberg types; if the Delta type is none of the supported primitives (e.g. an unhandled Variant or new Delta type) it throws this ValidationException naming the type's catalog string.
Source
Thrown at delta-lake/src/main/java/org/apache/iceberg/delta/DeltaLakeTypeToType.java:155
return Types.DoubleType.get();
} else if (atomic instanceof StringType) {
return Types.StringType.get();
} else if (atomic instanceof DateType) {
return Types.DateType.get();
} else if (atomic instanceof TimestampType) {
return Types.TimestampType.withZone();
} else if (atomic instanceof DecimalType) {
return Types.DecimalType.of(
((DecimalType) atomic).getPrecision(), ((DecimalType) atomic).getScale());
} else if (atomic instanceof BinaryType) {
return Types.BinaryType.get();
}
throw new ValidationException("Not a supported type: %s", atomic.getCatalogString());
}
}
View on GitHub (pinned to 86d9c8fc54)
Solutions
- Check the offending type in the message against Iceberg's supported Delta type mapping for your iceberg-delta-lake version.
- Upgrade iceberg-delta-lake (and delta-standalone) to a release that supports the type (e.g. Variant support), then re-run.
- Alter the Delta table to use a supported type (e.g. cast Variant columns to STRING/BINARY) before migration.
- If no support exists upstream, patch DeltaLakeTypeToType.atomic to map the type to an appropriate Iceberg Type.
Example fix
// before
throw new ValidationException("Not a supported type: %s", atomic.getCatalogString());
// after (after upgrading Iceberg, or as a stopgap)
if (atomic instanceof VariantType) {
return Types.StringType.get(); // stopgap: variant encoded as string JSON
} Defensive patterns
Strategy: validation
Validate before calling
Schema deltaSchema = deltaSnapshot.getMetadata().getSchema();
// verify no unsupported primitive types before migration
for (StructField f : deltaSchema.getFields()) {
if (f.getDataType() instanceof VariantType) throw new IllegalStateException("Unsupported type: Variant");
} Try / catch
try {
snapshotTable.execute();
} catch (ValidationException e) {
// read unsupported type from message; alter Delta schema or upgrade Iceberg
} Prevention
- Check the Delta table schema against the supported-type list for your iceberg-delta-lake version before migrating.
- Upgrade delta-standalone + iceberg-delta-lake when the Delta protocol introduces new types.
- Cast unsupported columns to supported types upstream.
When it happens
Trigger: Snapshotting/migrating a Delta table whose schema contains a primitive type not covered by the mapping — typically newer Delta types (Variant) or exotic types from a newer delta-standalone version.
Common situations: Delta tables written by a newer Delta Lake protocol that introduced new column types; attempting migration before Iceberg added support for that type.
Understand the failure class
Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.
Related errors
- Unsupported ZonedTimestampType.
- Unhandled type
- Cannot convert nested accessor to position
- Unsorted order ID must be 0
- Default values are not supported
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/da642a4a7c779c33.
Report an issue: GitHub.