Skip to main content

Veridelta

CI Pipeline codecov PyPI version License

Veridelta compares two datasets on their keys and reports exactly what changed after applying the variance you declared as expected. It is built for system modernizations, model retrains, and pipeline migrations — anywhere "equal" has to be defined, not assumed.

Powered by Polars. Documentation

Why

  • Deterministic verdicts. Nine fixed transform stages. The same rule produces the same result locally and in a warehouse, verified by a differential harness.
  • Scale. Lazy Polars scans. Warehouse pushdown compiles comparison SQL and never extracts full tables.
  • Exactness. Nothing is forgiven unless a rule says so. strict_types treats type drift as a mismatch, not a cast.
  • CI/CD. Exit codes 0 (match), 1 (drift or a failure), and 2 (invalid arguments). --json on stdout. --html writes a standalone report, --markdown a summary for pull requests. Artifacts for added, removed, and changed rows.
  • Schema evolution. schema_mode is intersection, exact, allow_additions, or allow_removals.
  • Connectors. Snowflake, Databricks, and BigQuery SQL pushdown; Delta Lake and Iceberg scans; PostgreSQL, MySQL, SQL Server, Oracle, SQLite, and more through ConnectorX. Optional extras.

Install

uv add veridelta
# or: pip install veridelta
uv add 'veridelta[snowflake]'   # extras: snowflake, databricks, bigquery, delta, iceberg, database, excel, fuzzy, all

Routing, YAML fields, and time travel: configuration guide.

Architecture

flowchart LR
  subgraph sources [Sources]
    files[Files]
    lakehouse[Delta Iceberg]
    databases[Postgres MySQL SQLite]
    warehouse[Snowflake Databricks BigQuery]
  end
  files --> loader[LoaderFactory]
  lakehouse --> loader
  databases --> loader
  warehouse --> compiler[SQLPushdownCompiler]
  loader --> engine["DiffEngine"]
  engine --> result[DiffResult]
  compiler --> warehouseSql[Warehouse SQL]
  warehouseSql --> result
  result --> artifacts[Artifacts]
  result --> reports["HTML JSON"]
  result --> exitCode[Exit code]

File, lakehouse, and database sources load through LoaderFactory into a local DiffEngine run. Same-warehouse pairs compile to SQL and execute in place. Both paths return a DiffResult.

Quick start

Python — DiffEngine consumes LazyFrames:

import polars as pl
from veridelta import DiffConfig, DiffEngine, DiffRule

result = DiffEngine(
    DiffConfig(
        primary_keys=["user_id"],
        rules=[DiffRule(pattern="^AMT_.*", absolute_tolerance=0.05)],
    ),
    pl.scan_parquet("legacy.parquet"),
    pl.scan_parquet("modern.parquet"),
).run()

if not result.summary.is_match:
    raise SystemExit(f"{result.summary.changed_count} rows differ")

YAML — the same comparison for CI:

# veridelta.yaml
primary_keys: ["transaction_id"]
source:
  path: "legacy.parquet"
  format: "parquet"
target:
  path: "modern.parquet"
  format: "parquet"
rules:
  - column_names: ["grand_total"]
    relative_tolerance: 0.01
  - column_names: ["contact_number"]
    regex_replace: {"[^0-9]": ""}
veridelta validate -c veridelta.yaml   # what would stop a run, without reading any rows
veridelta run -c veridelta.yaml

Where next

License

Apache 2.0.

Metadata

Release files for veridelta 0.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for veridelta 0.11.0
File Size Uploaded
veridelta-0.11.0.tar.gz 603.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for veridelta 0.11.0
File Interpreter ABI Platform
veridelta-0.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 718.8 kB

Release files / veridelta-0.11.0.tar.gz

Download URL veridelta-0.11.0.tar.gz
Size 603.5 kB
Tags Source
SHA-256 checksum
How to use checksums
d16d22d77549861b7a50b9baf6c2eb29923bc877ea3cc63cd58d5a9ebdd6fd47
BLAKE2b-256 checksum
How to use checksums
c4bf793c3b4b82eba93d4059c18c4ddd68dd73c2ccda54dc874c45f31c711d92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / veridelta-0.11.0-py3-none-any.whl

Download URL veridelta-0.11.0-py3-none-any.whl
Size 115.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac5b01e2b36b64525c9f9eedea3bc13a64c8888e6702a7862a7d1b216e53d1de
BLAKE2b-256 checksum
How to use checksums
407182f9970d7132f570e8e98ab9c4b1ef25e9f45cc072a0555620b61c2bd269
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.11.0 This release

2 release files

0.10.0

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page