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
- Read the batch and ignore the values instead of skipping.
- Rewrite the data with a different encoding (e.g. PLAIN) if skipping is required.
- 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
- Avoid skip() with BYTE_STREAM_SPLIT columns; read and discard.
- Prefer PLAIN encoding when skip paths are expected.
- Route skip requests to the non-vectorized reader.
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
- Unsupported variant: shredded typed_value array
- skip is not supported
- skip is not supported
- Non-supported bytesWidth: " + bytesWidth
- not a valid mode " + this.mode
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/b6a9ad510a81c46d.
Report an issue: GitHub.