Veridelta
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_typestreats type drift as a mismatch, not a cast. - CI/CD. Exit codes 0 (match), 1 (drift or a failure), and 2 (invalid arguments).
--jsonon stdout.--htmlwrites a standalone report. Artifacts for added, removed, and changed rows. - Schema evolution.
schema_modeisintersection,exact,allow_additions, orallow_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
- 1. Core Concepts — Python API,
DiffResult, rules. - 2. YAML and CLI — pipeline automation,
--json, artifacts. - 3. Advanced Rules — drift resolution on real data.
- 4. HTML Reports — audit and compliance hand-off.
- Configuration — fields, formats, extras, warehouse and lakehouse routing.
- API Reference — public Python surface.
- Roadmap — work that is not built yet.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| veridelta-0.10.0.tar.gz | 493.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|