pola-rs/polars · error · ImportError

reading delta deletion vectors requires deltalake >= {'.'.jo

Error message

reading delta deletion vectors requires deltalake >= {'.'.join(str(v) for v in dv_min_version)}, found {installed}.

What it means

Raised by the delta scan path when the table has deletion vectors and the installed deltalake package is older than 1.4.2. Interpreting deletion vectors (row-level deletes layered on Parquet files) requires deltalake >= 1.4.2, so polars refuses the read instead of returning rows that should have been deleted.

Source

Thrown at py-polars/src/polars/io/delta/_dataset.py:195

        reader_features = table.protocol().reader_features
        has_deletion_vectors = (
            reader_features is not None and "deletionVectors" in reader_features
        )

        deletion_files: DeletionFiles | None = None
        if has_deletion_vectors:
            import deltalake

            dv_min_version = (1, 4, 2)
            installed = parse_version(deltalake.__version__)
            if installed < dv_min_version:
                msg = (
                    f"reading delta deletion vectors requires "
                    f"deltalake >= {'.'.join(str(v) for v in dv_min_version)}, "
                    f"found {installed}."
                )
                raise ImportError(msg)

            def _deletion_vector_callback(
                requested_paths: pl.DataFrame,
            ) -> pl.DataFrame:
                delta_deletion_vectors = _fetch_deletion_vectors(table)
                if delta_deletion_vectors is None:
                    return pl.DataFrame(
                        {"selection_vector": [None] * len(requested_paths)},
                        schema={"selection_vector": pl.List(pl.Boolean)},
                    )
                return _extract_delta_deletion_vectors(
                    requested_paths, delta_deletion_vectors
                )

            deletion_files = (
                "delta-deletion-vector",
                _deletion_vector_callback,
            )

View on GitHub (pinned to df599052da)

Solutions

  1. Upgrade: pip install -U 'deltalake>=1.4.2'
  2. Pin deltalake>=1.4.2 in the project requirements so DV-enabled tables always read correctly
  3. If upgrading is blocked, rewrite the table without deletion vectors (VACUUM/OPTIMIZE or re-write from the writer side) before reading

Example fix

# before: deltalake 1.3, table has deletion vectors
pl.scan_delta("s3://bucket/table").collect()

# after
pip install -U 'deltalake>=1.4.2'
Defensive patterns

Strategy: validation

Validate before calling

from importlib.metadata import version
from packaging.version import parse

assert parse(version("deltalake")) >= (1, 4, 2), "deltalake>=1.4.2 required for deletion vectors"

Prevention

When it happens

Trigger: pl.scan_delta()/read_delta() on a table containing deletion vectors with deltalake < 1.4.2 installed (the has_deletion_vectors path is taken).

Common situations: Reading tables written by newer writers (Databricks, Spark with DVs, newer delta-rs) from an environment with an older deltalake wheel; long-lived environments after upstream writers enable deletion vectors.

Related errors


AI-assisted analysis of pola-rs/polars@df599052da (2026-08-16). Data as JSON: /api/errors/bcf522e4451eeecf. Report an issue: GitHub.