apache/iceberg · error · UnsupportedOperationException
skip is not supported
Error message
skip is not supported
What it means
VectorizedDeltaEncodedValuesReader.skip() is not implemented for DELTA_BINARY_PACKED-encoded columns in Iceberg's vectorized Parquet reader. The Iceberg vectorized path reads all values into Arrow vectors and has no row-skipping logic for this decoder, so any skip request fails fast with UnsupportedOperationException. It signals an unsupported code path, not data corruption.
Source
Thrown at arrow/src/main/java/org/apache/iceberg/arrow/vectorized/parquet/VectorizedDeltaEncodedValuesReader.java:108
firstValue = BytesUtils.readZigZagVarLong(this.inputStream);
}
@Override
public int readInteger() {
readValues(1, null, 0, INT_SIZE, (f, i, v) -> intVal = (int) v);
return intVal;
}
@Override
public long readLong() {
readValues(1, null, 0, LONG_SIZE, (f, i, v) -> longVal = v);
return longVal;
}
/** The Iceberg reader currently does not do skipping */
@Override
public void skip() {
throw new UnsupportedOperationException("skip is not supported");
}
int totalValueCount() {
return totalValueCount;
}
@Override
public void readIntegers(int total, FieldVector vec, int rowId) {
readValues(total, vec, rowId, INT_SIZE, (f, i, v) -> f.getDataBuffer().setInt(i, (int) v));
}
int[] readIntegers(int total, int rowId) {
int[] result = new int[total];
readValues(
total,
null,
rowId,
INT_SIZE,View on GitHub (pinned to 86d9c8fc54)
Solutions
- Set the read option to disable vectorized reads (e.g. Spark: vectorized reader disabled via table property read.split.vectorization.enabled=false) to fall back to the plain Parquet reader.
- Rewrite the data files with a supported encoding (e.g. plain dictionary encoding) via a rewrite operation so skipping is supported.
- If you control the scan, avoid paths that request skipping on delta-encoded columns (remove column-index-based skip configurations).
Example fix
// before (Spark SQL) SELECT ... FROM delta_encoded_table WHERE ... -- vectorized read, skip path throws // after SET spark.sql.iceberg.vectorization.enabled=false; SELECT ... FROM delta_encoded_table WHERE ...
Defensive patterns
Strategy: fallback
Validate before calling
// Before scanning, check if the table/files may use unsupported encodings under vectorization
boolean vectorized = conf.getBoolean("spark.sql.iceberg.vectorization.enabled", true);
// if data may contain DELTA_BINARY_PACKED columns, plan to disable vectorization Try / catch
try {
icebergTable.scan().project(schema).planFiles()... /* vectorized read */;
} catch (UnsupportedOperationException e) {
if (e.getMessage().contains("skip is not supported")) {
// retry with vectorization disabled
} else throw e;
} Prevention
- Disable vectorized reads when files are known to use delta encodings
- Rewrite files with dictionary/plain encodings before enabling vectorization
- Avoid scan configurations that trigger row skipping in vectorized mode
When it happens
Trigger: Reading a Parquet column encoded with DELTA_BINARY_PACKED via the vectorized reader when the scan path requests skipping values (e.g. row-group filtering or column-index-based row skip).
Common situations: Tables written with delta-encoded integer columns read through Spark with vectorized reads enabled and a filter that uses page/row-group offsets to skip values.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- skip is not supported
- ${className} doesn't implement setRowGroupInfo(PageReadStore
- Unsupported variant: shredded typed_value array
- 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/a83071b9b953e1b4.
Report an issue: GitHub.