apache/iceberg · error · UnsupportedOperationException
Unsupported variant: shredded typed_value primitive
Error message
Unsupported variant: shredded typed_value primitive
What it means
VectorizedVariantVisitor.primitive handles the Variant shredded typed_value column. When the typed_value is shredded as a bare primitive type, this visitor cannot produce a reader and throws UnsupportedOperationException — primitive shredding of Variant typed_value is not supported by this vectorized visitor.
Solutions
- Upgrade Iceberg on the reader side to a version supporting primitive-typed_value shredding
- Disable vectorized reads for variant columns / read via the non-vectorized path
- Rewrite (compaction) with shredding disabled or with a supported shred layout
Example fix
// before
spark.read.option("vectorized-reader-enabled", "true").load("variant_table")
// after
spark.read.option("vectorized-reader-enabled", "false").load("variant_table") Defensive patterns
Strategy: fallback
Validate before calling
// inspect shredding schema of typed_value
if (typedValueField.getType().isPrimitive()) {
// unsupported: use non-vectorized variant reader
} Try / catch
try {
return variantVisitor.build();
} catch (UnsupportedOperationException e) {
return nonVectorizedVariantReader();
} Prevention
- Keep writer and reader Iceberg versions consistent for Variant shredding
- Disable vectorization on tables with shredded Variant columns
- Upgrade before enabling primitive shredding on writers
When it happens
Trigger: Reading a table with Variant columns whose Parquet shredding encodes typed_value as a primitive (per newer shred-variant specs) via the vectorized variant reader; the visitor's primitive() callback fires and throws.
Common situations: Variant data shredded by a newer writer/Spark version while the reader's Iceberg version lacks primitive-shredding support; version mismatch between writer and reader shred encodings.
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 object with " +…
- 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/2e02afc605c69289.
Report an issue: GitHub.
Appendix: source
Thrown at arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedVariantVisitor.java:97
@Override
public VectorizedReader<?> variant(
GroupType variant, VectorizedReader<?> metadataResult, VectorizedReader<?> valueResult) {
if (metadataResult instanceof VectorizedArrowReader
&& valueResult instanceof VectorizedArrowReader) {
Types.NestedField field = findVariantField(variant);
if (field != null) {
return new VectorizedArrowReader.VectorizedVariantReader(
field, (VectorizedArrowReader) metadataResult, (VectorizedArrowReader) valueResult);
}
}
return null;
}
@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");
}View on GitHub (pinned to 86d9c8fc54)