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. Artifacts for added, removed, and changed rows.
  • Schema evolution. schema_mode is intersection, exact, allow_additions, or allow_removals.
  • Connectors. Snowflake and Databricks SQL pushdown; Delta Lake and Iceberg scans. Optional extras.

Install

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

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

Architecture

flowchart LR
  subgraph sources [Sources]
    files[Files]
    lakehouse[Delta Iceberg]
    warehouse[Snowflake Databricks]
  end
  files --> loader[LoaderFactory]
  lakehouse --> 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 and lakehouse 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 run -c veridelta.yaml

Where next

License

Apache 2.0.

Metadata

Release files for veridelta 0.10.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.10.0
File Size Uploaded
veridelta-0.10.0.tar.gz 493.4 kB Details

Built distribution (wheel)

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

Total release size: 581.1 kB

Release files / veridelta-0.10.0.tar.gz

Download URL veridelta-0.10.0.tar.gz
Size 493.4 kB
Tags Source
SHA-256 checksum
How to use checksums
71b41e92222946122bc4486a3c40107a09f571041bf36fb1f486df3527a800d8
BLAKE2b-256 checksum
How to use checksums
29b54d42ec114a4bef8da0d3d92434f46f7830bf83c7c3a61679968eff6d1422
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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.10.0-py3-none-any.whl

Download URL veridelta-0.10.0-py3-none-any.whl
Size 87.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d636ac30735b378d191c3c6305b2384c7d753ea2271498cbee01cddd127f427
BLAKE2b-256 checksum
How to use checksums
189e3f20d31b827979e1e103588ef2dce24471a8cc617d15e09cd5e337a690c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","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.10.0 This release

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