{"record":{"id":"3e578395b9cd4aeb","repo":"apache/iceberg","slug":"unsupported-type-array","errorCode":null,"errorMessage":"Unsupported type: array","messagePattern":"Unsupported type: array","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowVectorAccessor.java","lineNumber":85,"sourceCode":"\n  public double getDouble(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: double\");\n  }\n\n  public byte[] getBinary(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: binary\");\n  }\n\n  public DecimalT getDecimal(int rowId, int precision, int scale) {\n    throw new UnsupportedOperationException(\"Unsupported type: decimal\");\n  }\n\n  public Utf8StringT getUTF8String(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: UTF8String\");\n  }\n\n  public ArrayT getArray(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: array\");\n  }\n\n  public ChildVectorT childColumn(int pos) {\n    if (childColumns != null) {\n      return childColumns[pos];\n    } else {\n      throw new IndexOutOfBoundsException(\"Child columns is null hence cannot find index: \" + pos);\n    }\n  }\n\n  public final ValueVector getVector() {\n    return vector;\n  }\n}\n","sourceCodeStart":67,"sourceCodeEnd":100,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowVectorAccessor.java#L67-L100","documentation":"ArrowVectorAccessor.getArray is a base-class stub that always throws UnsupportedOperationException. List/array columns require an accessor subclass that overrides getArray and childColumn; the base class cannot decode nested elements, so any call that falls through to it indicates the column is not an array or the accessor lacks array support.","triggerScenarios":"Calling getArray(rowId) on a non-list accessor while materializing a vectorized batch; attempting nested-element access through an accessor created for a primitive column.","commonSituations":"Vectorized Iceberg reads with nested (list) columns where the configured batch reader does not produce list accessors; code that generically walks all columns calling typed getters without switching on column type.","solutions":["Confirm the column's Iceberg type is List before calling getArray","Ensure the vectorized reader path supports nested types, or fall back to the non-vectorized row reader for list columns","Use childColumn/element accessors from a list-supporting accessor subclass rather than the base class"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if (!(columnType instanceof Types.NestedType) || columnType.typeId() != TypeID.LIST) { throw new IllegalArgumentException(\"not a list column\"); }","typeGuard":"boolean isArrayAccessor(ArrowVectorAccessor<?,?,?,?> a) { return a instanceof ListArrowAccessor; }","tryCatchPattern":"try { return accessor.getArray(rowId); } catch (UnsupportedOperationException e) { return null; } // caller falls back to row reader","preventionTips":["Exclude list columns from vectorized batches unless the accessor supports arrays","Verify nested-type support is enabled in the vectorized reader config","Test projections containing nested types explicitly"],"tags":["arrow","vectorized-read","nested-types"],"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"}