{"record":{"id":"1e269dd9d19d7d18","repo":"apache/iceberg","slug":"unsupportedoperationexception-with-no-message-tim","errorCode":null,"errorMessage":"UnsupportedOperationException with no message (TimestampInt96Reader.nextDictEncodedVal)","messagePattern":"UnsupportedOperationException with no message \\(TimestampInt96Reader\\.nextDictEncodedVal\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/vectorized/parquet/VectorizedParquetDefinitionLevelReader.java","lineNumber":652,"sourceCode":"        FieldVector vector,\n        int idx,\n        VectorizedValuesReader valuesReader,\n        int typeWidth,\n        byte[] byteArray) {\n      ((BitVector) vector).setSafe(idx, valuesReader.readBoolean() ? 1 : 0);\n    }\n\n    @Override\n    protected void nextDictEncodedVal(\n        FieldVector vector,\n        int idx,\n        VectorizedDictionaryEncodedParquetValuesReader reader,\n        Dictionary dict,\n        Mode mode,\n        int numValues,\n        NullabilityHolder holder,\n        int typeWidth) {\n      throw new UnsupportedOperationException();\n    }\n  }\n\n  class DictionaryIdReader extends BaseReader {\n\n    @Override\n    protected void nextVal(\n        FieldVector vector,\n        int idx,\n        VectorizedValuesReader valuesReader,\n        int typeWidth,\n        byte[] byteArray) {\n      throw new UnsupportedOperationException();\n    }\n\n    @Override\n    protected void nextDictEncodedVal(\n        FieldVector vector,","sourceCodeStart":634,"sourceCodeEnd":670,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/parquet/VectorizedParquetDefinitionLevelReader.java#L634-L670","documentation":"TimestampInt96Reader.nextDictEncodedVal is implemented to always throw an UnsupportedOperationException with no message — INT96 timestamps are simply not supported in dictionary-encoded vectorized decoding. Unlike error 292 (which has a message for unknown modes), this is an unconditional refusal.","triggerScenarios":"Any call to nextDictEncodedVal on a TimestampInt96Reader, i.e. vectorized reading of a dictionary-encoded INT96 timestamp column that takes the dictionary decode path (e.g. packed dictionary decoding).","commonSituations":"Legacy Parquet files (Hive/Impala/old Spark) storing timestamps as INT96 with dictionary-encoded pages read through the Iceberg vectorized Arrow reader; the vectorized INT96 reader only supports plain (non-dictionary) reads.","solutions":["Disable vectorized reads (read.parquet.vectorization.enabled=false) to fall back to the generic reader.","Rewrite/compact the table converting INT96 timestamps to INT64 with a timestamp logical type.","Implement nextDictEncodedVal for INT96 if dictionary-encoded INT96 support is needed."],"exampleFix":"// before\nspark.read.format(\"iceberg\").load(\"db.table\") // fails on dict-encoded INT96\n// after\ntable.newScan().option(\"read.parquet.vectorization.enabled\", \"false\");","handlingStrategy":"fallback","validationCode":"boolean isInt96 = desc.getPrimitiveType().getPrimitiveTypeName() == PrimitiveTypeName.INT96;\nboolean dictEncoded = pageEncoding != null && pageEncoding.isDictionaryEncoded();\nif (isInt96 && dictEncoded) { vectorizationSupported = false; }","typeGuard":null,"tryCatchPattern":"try {\n  return readVectorizedBatch();\n} catch (UnsupportedOperationException e) {\n  return readRowOrientedBatch(); // non-vectorized path supports INT96\n}","preventionTips":["Rewrite tables to INT64 timestamp logical types — INT96 is deprecated in the Parquet spec.","Set read.parquet.vectorization.enabled=false on legacy Hive/Impala tables.","Check column encodings in the footer before choosing the vectorized path."],"tags":["parquet","int96","timestamp","dictionary-encoding"],"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"}