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
- Upgrade Iceberg to a version implementing object-typed typed_value vectorized reads
- Disable vectorized reads for the table/scan
- 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
- Disable vectorization for tables with object-shredded Variants
- Upgrade Iceberg to gain object typed_value support
- Compact/rewrite with supported shred layouts before vectorized scans
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
- Unsupported variant: shredded typed_value primitive
- Invalid bit width for int
- Invalid bit width for int
- Invalid bound type
- Invalid primitive type for decimal
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)