{"record":{"id":"ba424b773d7539b0","repo":"apache/iceberg","slug":"unsupported-type-primitive-ba424b","errorCode":null,"errorMessage":"Unsupported type: \" + primitive","messagePattern":"Unsupported type: \" \\+ primitive","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedArrowReader.java","lineNumber":376,"sourceCode":"        this.vec = arrowField.createVector(rootAlloc);\n        ((BitVector) vec).allocateNew(batchSize);\n        this.readType = ReadType.BOOLEAN;\n        this.typeWidth = UNKNOWN_WIDTH;\n        break;\n      case INT64:\n        this.vec = arrowField.createVector(rootAlloc);\n        ((BigIntVector) vec).allocateNew(batchSize);\n        this.readType = ReadType.LONG;\n        this.typeWidth = (int) BigIntVector.TYPE_WIDTH;\n        break;\n      case DOUBLE:\n        this.vec = arrowField.createVector(rootAlloc);\n        ((Float8Vector) vec).allocateNew(batchSize);\n        this.readType = ReadType.DOUBLE;\n        this.typeWidth = (int) Float8Vector.TYPE_WIDTH;\n        break;\n      default:\n        throw new UnsupportedOperationException(\"Unsupported type: \" + primitive);\n    }\n  }\n\n  @Override\n  public void setRowGroupInfo(PageReadStore source, Map<ColumnPath, ColumnChunkMetaData> metadata) {\n    ColumnChunkMetaData chunkMetaData = metadata.get(ColumnPath.get(columnDescriptor.getPath()));\n    this.dictionary =\n        vectorizedColumnIterator.setRowGroupInfo(\n            source.getPageReader(columnDescriptor),\n            !ParquetUtil.hasNonDictionaryPages(chunkMetaData));\n  }\n\n  @Override\n  public void close() {\n    if (vec != null) {\n      vec.close();\n    }\n  }","sourceCodeStart":358,"sourceCodeEnd":394,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedArrowReader.java#L358-L394","documentation":"VectorizedArrowReader.allocateVectorBasedOnTypeName creates the Arrow vector matching the Parquet primitive type. Its switch covers common physical types (INT32/INT64/FLOAT/DOUBLE/BINARY/fixed binary etc.); any other primitive falls to default and throws this UnsupportedOperationException before any vector is allocated.","triggerScenarios":"Constructing a VectorizedArrowReader for a column whose Parquet primitive type is not in the handled switch cases (e.g. an unmapped exotic physical type reached via allocateFieldVector).","commonSituations":"Reading Parquet files written by non-Iceberg writers with unusual physical representations; enabling vectorized reads on tables containing types the vectorized path does not support.","solutions":["Disable vectorized reads (parquet vectorization disabled) so the generic reader handles the column","Check the column's physical type in the Parquet metadata and confirm it is one of the vectorized-supported types","Upgrade Iceberg to a version adding support for that physical type","Write the data with a standard Iceberg type mapping so the physical type is supported"],"exampleFix":"// before\nspark.read.option(\"vectorized-reader-enabled\", \"true\")...\n// after\nspark.read.option(\"vectorized-reader-enabled\", \"false\")...","handlingStrategy":"fallback","validationCode":"Set<String> supported = Set.of(\"INT32\",\"INT64\",\"FLOAT\",\"DOUBLE\",\"BINARY\",\"FIXED_LEN_BYTE_ARRAY\",\"BOOLEAN\",\"INT96\");\nif (!supported.contains(primitive.getPrimitiveTypeName().toString())) {\n  // choose non-vectorized reader\n}","typeGuard":"boolean vectorizationSupported(PrimitiveType p) {\n  switch (p.getPrimitiveTypeName()) {\n    case INT32: case INT64: case FLOAT: case DOUBLE: case BINARY:\n    case FIXED_LEN_BYTE_ARRAY: case BOOLEAN: return true;\n    default: return false;\n  }\n}","tryCatchPattern":"try {\n  return new VectorizedArrowReader(...);\n} catch (UnsupportedOperationException e) {\n  return genericArrowReader();\n}","preventionTips":["Write data via Iceberg writers so physical types are standard","Disable vectorized reads for exotic-column tables","Verify physical types in Parquet footer before planning vectorized scans"],"tags":["arrow","parquet","vectorized-reads"],"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"}