apache/iceberg · error · UnsupportedOperationException

Unsupported variant: shredded typed_value object with " +…

Error message

Unsupported variant: shredded typed_value object with " + fieldResults.size() + " fields

What it means

VectorizedVariantVisitor.object handles Variant typed_value shredded as an object. Any shredded typed_value object (regardless of field count) has no vectorized reader implementation, so object() unconditionally throws UnsupportedOperationException including the number of fields encountered.

Solutions

  1. Upgrade Iceberg to a version implementing object-typed typed_value vectorized reads
  2. Disable vectorized reads for the table/scan
  3. Rewrite the data without object shredding via compaction

Example fix

// before
spark.read.option("vectorized-reader-enabled", "true").load("shredded_variant_table")
// after
spark.read.option("vectorized-reader-enabled", "false").load("shredded_variant_table")
Defensive patterns

Strategy: fallback

Validate before calling

if (typedValueField.getType() instanceof GroupType
    && !isVariantValueGroup(typedValueField.getType())) {
  // object-typed typed_value: not supported vectorized
}

Try / catch

try {
  return vectorizedObjectVariantReader();
} catch (UnsupportedOperationException e) {
  return genericVariantReader();
}

Prevention

When it happens

Trigger: Vectorized read of a Variant column whose shredding produced an object-typed typed_value group; the ParquetVariantShredding visitor routes to object() and throws.

Common situations: Querying shredded Variant data written with object shredding (e.g. shredded struct-valued Variants) using a reader version without object support; enabling vectorization by default on such tables.

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/42daba0c91a0f0a5. Report an issue: GitHub.

Appendix: source

Thrown at arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedVariantVisitor.java:113

  @Override
  public VectorizedReader<?> primitive(PrimitiveType primitive) {
    throw new UnsupportedOperationException("Unsupported variant: shredded typed_value primitive");
  }

  @Override
  public VectorizedReader<?> value(
      GroupType value, VectorizedReader<?> valueResult, VectorizedReader<?> typedResult) {
    if (typedResult != null) {
      throw new UnsupportedOperationException(
          "Unsupported variant: shredded typed_value primitive");
    }
    return valueResult;
  }

  @Override
  public VectorizedReader<?> object(
      GroupType object, VectorizedReader<?> valueResult, List<VectorizedReader<?>> fieldResults) {
    throw new UnsupportedOperationException(
        "Unsupported variant: shredded typed_value object with " + fieldResults.size() + " fields");
  }

  @Override
  public VectorizedReader<?> array(
      GroupType array, VectorizedReader<?> valueResult, VectorizedReader<?> elementResult) {
    throw new UnsupportedOperationException("Unsupported variant: shredded typed_value array");
  }

  private ColumnDescriptor resolveDescriptor(PrimitiveType primitive) {
    // Build full column path: variant group path + primitive name
    // e.g., ["v1", "metadata"] or ["v2", "value"]
    String[] path = new String[variantGroupPath.length + 1];
    System.arraycopy(variantGroupPath, 0, path, 0, variantGroupPath.length);
    path[variantGroupPath.length] = primitive.getName();

    try {
      return parquetSchema.getColumnDescription(path);

View on GitHub (pinned to 86d9c8fc54)