{"record":{"id":"78c1983911721363","repo":"apache/iceberg","slug":"unsupported-type-primitive","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/GenericArrowVectorAccessorFactory.java","lineNumber":178,"sourceCode":"    } else {\n      switch (primitive.getPrimitiveTypeName()) {\n        case FIXED_LEN_BYTE_ARRAY:\n        case BINARY:\n          return new DictionaryBinaryAccessor<>(\n              (IntVector) vector, dictionary, stringFactorySupplier.get());\n        case FLOAT:\n          return new DictionaryFloatAccessor<>((IntVector) vector, dictionary);\n        case INT64:\n          return new DictionaryLongAccessor<>((IntVector) vector, dictionary);\n        case INT96:\n          // Impala & Spark used to write timestamps as INT96 by default. For backwards\n          // compatibility we try to read INT96 as timestamps. But INT96 is not recommended\n          // and deprecated (see https://issues.apache.org/jira/browse/PARQUET-323)\n          return new DictionaryTimestampInt96Accessor<>((IntVector) vector, dictionary);\n        case DOUBLE:\n          return new DictionaryDoubleAccessor<>((IntVector) vector, dictionary);\n        default:\n          throw new UnsupportedOperationException(\"Unsupported type: \" + primitive);\n      }\n    }\n  }\n\n  @SuppressWarnings(\"checkstyle:CyclomaticComplexity\")\n  private ArrowVectorAccessor<DecimalT, Utf8StringT, ArrayT, ChildVectorT> getPlainVectorAccessor(\n      FieldVector vector, PrimitiveType primitive) {\n    if (vector instanceof BitVector) {\n      return new BooleanAccessor<>((BitVector) vector);\n    } else if (vector instanceof IntVector) {\n      if (isDecimal(primitive)) {\n        return new IntBackedDecimalAccessor<>((IntVector) vector, decimalFactorySupplier.get());\n      }\n      return new IntAccessor<>((IntVector) vector);\n    } else if (vector instanceof BigIntVector) {\n      if (isDecimal(primitive)) {\n        return new LongBackedDecimalAccessor<>((BigIntVector) vector, decimalFactorySupplier.get());\n      }","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/GenericArrowVectorAccessorFactory.java#L160-L196","documentation":"After the logical-type dispatch, the dictionary accessor path also switches on the raw PrimitiveTypeName (physical type); any physical type not handled (e.g. BOOLEAN, FLOAT, INT96-unmapped, or exotic types) hits the default branch and throws 'Unsupported type: ' + primitive. The vectorized dictionary reader supports only a fixed set of physical types.","triggerScenarios":"Requesting a vectorized accessor for a dictionary-encoded column whose physical Parquet type (e.g. FLOAT, BOOLEAN, INTERVAL) has no Dictionary*Accessor implementation.","commonSituations":"Third-party Parquet files with physical types Iceberg's vectorized reader never supported; expecting full type coverage in vectorized reads when it is limited to a known subset.","solutions":["Check the column's physical type and exclude it from vectorized reads (use the row reader)","Rewrite data with supported physical types (INT32/INT64/BINARY/FIXED_LEN_BYTE_ARRAY/DOUBLE/FLBA timestamps)","Upgrade Iceberg if a newer version added an accessor for the type"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"if (!SUPPORTED_PHYSICAL_TYPES.contains(primitive.getPrimitiveTypeName())) { useRowReader(column); }","typeGuard":null,"tryCatchPattern":"try { accessor = factory.getVectorAccessor(holder); } catch (UnsupportedOperationException e) { if (e.getMessage().startsWith(\"Unsupported type:\")) { accessor = rowAccessor(holder); } else throw e; }","preventionTips":["Enumerate the supported physical types in reader config and check columns against it","Rewrite unsupported columns into supported physical encodings","Always provide a row-based fallback for full type coverage"],"tags":["parquet","dictionary-encoding","physical-type"],"backgroundTag":"unsupported-enum-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}