apache/iceberg · error · UnsupportedOperationException

skip is not supported

Error message

skip is not supported

What it means

VectorizedByteStreamSplitValuesReader does not implement skip(): BYTE_STREAM_SPLIT decoding requires reading whole streams to maintain byte positions, so skip() throws UnsupportedOperationException with this message.

Source

Thrown at arrow/src/main/java/org/apache/iceberg/arrow/vectorized/parquet/VectorizedByteStreamSplitValuesReader.java:111

  @Override
  public void readLongs(int total, FieldVector vec, int rowId) {
    readBatch(total, vec, rowId);
  }

  @Override
  public void readFloats(int total, FieldVector vec, int rowId) {
    readBatch(total, vec, rowId);
  }

  @Override
  public void readDoubles(int total, FieldVector vec, int rowId) {
    readBatch(total, vec, rowId);
  }

  @Override
  public void skip() {
    throw new UnsupportedOperationException("skip is not supported");
  }

  private void readBatch(int total, FieldVector vec, int rowId) {
    ensureDecoded();
    int bytesToRead = total * elementSizeInBytes;
    long destOffset = (long) rowId * elementSizeInBytes;
    ByteBuffer slice = decodedDataStream.slice();
    slice.limit(bytesToRead);
    vec.getDataBuffer().setBytes(destOffset, slice);
    decodedDataStream.position(decodedDataStream.position() + bytesToRead);
  }

  private void ensureDecoded() {
    if (decodedDataStream == null) {
      Preconditions.checkState(
          totalBytesInStream % elementSizeInBytes == 0,
          "Stream size %s is not a multiple of element size %s",
          totalBytesInStream,

View on GitHub (pinned to 86d9c8fc54)

Solutions

  1. Read the batch and ignore the values instead of skipping.
  2. Rewrite the data with a different encoding (e.g. PLAIN) if skipping is required.
  3. Use the non-vectorized reader path that supports BYTE_STREAM_SPLIT skipping.

Example fix

// before
reader.skip();
// after
reader.readDoubles(1, vec, rowId); // read and ignore
Defensive patterns

Strategy: fallback

Try / catch

// catch (UnsupportedOperationException e) {
//   if ("skip is not supported".equals(e.getMessage())) { readBatchAndIgnore(); }
//   else throw e;
// }

Prevention

When it happens

Trigger: Calling skip() while decoding a BYTE_STREAM_SPLIT encoded FLOAT/DOUBLE column.

Common situations: Engine integrations (e.g. predicate-pushdown skipping) over FLOAT/DOUBLE columns written with BYTE_STREAM_SPLIT encoding.

Related errors


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/b6a9ad510a81c46d. Report an issue: GitHub.