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

  1. Check the offending type in the message against Iceberg's supported Delta type mapping for your iceberg-delta-lake version.
  2. Upgrade iceberg-delta-lake (and delta-standalone) to a release that supports the type (e.g. Variant support), then re-run.
  3. Alter the Delta table to use a supported type (e.g. cast Variant columns to STRING/BINARY) before migration.
  4. 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

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


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/da642a4a7c779c33. Report an issue: GitHub.