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.

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.

Appendix: 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)