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

  1. 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.
  2. Rewrite the data files with a supported encoding (e.g. plain dictionary encoding) via a rewrite operation so skipping is supported.
  3. 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

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


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