{"record":{"id":"bcddf4df8f67e1de","repo":"apache/iceberg","slug":"unsupported-variant-shredded-typed-value-array","errorCode":null,"errorMessage":"Unsupported variant: shredded typed_value array","messagePattern":"Unsupported variant: shredded typed_value array","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedVariantVisitor.java","lineNumber":120,"sourceCode":"      GroupType value, VectorizedReader<?> valueResult, VectorizedReader<?> typedResult) {\n    if (typedResult != null) {\n      throw new UnsupportedOperationException(\n          \"Unsupported variant: shredded typed_value primitive\");\n    }\n    return valueResult;\n  }\n\n  @Override\n  public VectorizedReader<?> object(\n      GroupType object, VectorizedReader<?> valueResult, List<VectorizedReader<?>> fieldResults) {\n    throw new UnsupportedOperationException(\n        \"Unsupported variant: shredded typed_value object with \" + fieldResults.size() + \" fields\");\n  }\n\n  @Override\n  public VectorizedReader<?> array(\n      GroupType array, VectorizedReader<?> valueResult, VectorizedReader<?> elementResult) {\n    throw new UnsupportedOperationException(\"Unsupported variant: shredded typed_value array\");\n  }\n\n  private ColumnDescriptor resolveDescriptor(PrimitiveType primitive) {\n    // Build full column path: variant group path + primitive name\n    // e.g., [\"v1\", \"metadata\"] or [\"v2\", \"value\"]\n    String[] path = new String[variantGroupPath.length + 1];\n    System.arraycopy(variantGroupPath, 0, path, 0, variantGroupPath.length);\n    path[variantGroupPath.length] = primitive.getName();\n\n    try {\n      return parquetSchema.getColumnDescription(path);\n    } catch (InvalidRecordException e) {\n      return null;\n    }\n  }\n\n  private Types.NestedField findVariantField(GroupType variant) {\n    if (variant.getId() != null) {","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedVariantVisitor.java#L102-L138","documentation":"The vectorized Variant reader supports reading shredded Variant columns only up to primitives and typed_value scalars. When a shredded array typed_value is encountered (a Parquet group with a repeated element), this visitor hook deliberately throws UnsupportedOperationException because the vectorized path has no implementation for shredded arrays yet.","triggerScenarios":"Reading a Parquet Variant column whose shredded variant_metadata/variant_value group contains an array-typed typed_value field, via the vectorized reader (VectorizedVariantVisitor.array).","commonSituations":"Tables written with variant shredding that produced ARRAY values; queries using vectorized reads against schema-evolved Variant data containing arrays.","solutions":["Fall back to the non-vectorized variant reader for these files (disable vectorization for the variant column).","Rewrite the data to keep array variant values unshredded so the generic Variant path handles them.","Check for an updated Iceberg version implementing shredded array support in the vectorized reader."],"exampleFix":"// before (vectorized read)\nSparkContext.getConf().set(\"spark.sql.iceberg.handle-timestamp-without-timezone\", ...)\n.read.format(\"iceberg\").load(\"t\") // vectorized variant read fails on shredded array\n// after\nspark.read.format(\"iceberg\").option(\"vectorization-enabled\", \"false\").load(\"t\")","handlingStrategy":"fallback","validationCode":"// Inspect shredded variant schema before enabling vectorization\nboolean hasShreddedArray = variantSchema.fields().stream()\n    .anyMatch(f -> f.type() instanceof Types.NestedField\n        && ((Types.NestedField) f.type()).type().isListType());\nif (hasShreddedArray) { /* disable vectorization or use generic variant reader */ }","typeGuard":null,"tryCatchPattern":"// catch (UnsupportedOperationException e) {\n//   if (e.getMessage().contains(\"shredded typed_value\")) { fallbackToNonVectorizedRead(); }\n//   else throw e;\n// }","preventionTips":["Check shredded Variant types before enabling vectorized reads.","Keep Iceberg updated for expanded vectorized Variant support.","Pin shredding output to scalar/primitive types only."],"tags":["parquet","variant","vectorized-reader","unsupported-feature"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}