Skip to main content

The zero-dependency regression testing tool for modern data warehouses. DuckDB-powered data diffing for Snowflake.

Project description

quack-diff

quack-diff logo

The zero-dependency regression testing tool for modern data warehouses.

DuckDB-powered data diffing for Snowflake.

Features

  • DuckDB-First Architecture: Uses DuckDB as a universal adapter for database connectivity
  • Dialect-Safe Hashing: Handles NULL values and type mismatches correctly across databases
  • Time-Travel Support: Compare data against historical snapshots (Snowflake, Delta Lake)
  • CI/CD Ready: Exit codes for pipeline integration, environment variable configuration
  • Hacker-Friendly: Rich terminal output with beautiful diff tables

Installation

uv add quack-diff

Quick Start

Basic compare

# Compare two tables
quack-diff compare --source db1.users --target db2.users --key id

# Compare with threshold (allow up to 1% difference)
quack-diff compare --source prod.orders --target dev.orders --key order_id --threshold 0.01

Time-Travel compare (Snowflake)

# Compare current data with 5 minutes ago
quack-diff compare \
  --source snowflake.orders \
  --target snowflake.orders \
  --source-at "5 minutes ago" \
  --key order_id

Schema Comparison

quack-diff schema --source db1.users --target db2.users

Configuration

quack-diff supports configuration via environment variables:

# Snowflake
export QUACK_DIFF_SNOWFLAKE_ACCOUNT="your-account"
export QUACK_DIFF_SNOWFLAKE_USER="your-user"
export QUACK_DIFF_SNOWFLAKE_PASSWORD="your-password"

Or via a quack-diff.yaml configuration file:

snowflake:
  account: your-account
  user: your-user
  database: your-database

defaults:
  threshold: 0.0

How It Works

quack-diff leverages DuckDB's extension system to connect to external databases:

  1. Attach: Mount remote databases using DuckDB extensions (snowflake)
  2. Hash: Generate row-level hashes using dialect-safe SQL (handles NULLs, type coercion)
  3. Compare: Identify mismatches by comparing hash values
  4. Report: Display results in beautiful terminal tables

Development

# Clone the repository
git clone https://github.com/matteorenoldi/quack-diff.git
cd quack-diff

# Install with dev dependencies
uv sync

# Install pre-commit hooks
uv run prek install

# Run tests
uv run pytest

# Lint
uv run ruff check .

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quack_diff-0.0.9.tar.gz (168.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quack_diff-0.0.9-py3-none-any.whl (34.9 kB view details)

Uploaded Python 3

File details

Details for the file quack_diff-0.0.9.tar.gz.

File metadata

  • Download URL: quack_diff-0.0.9.tar.gz
  • Upload date:
  • Size: 168.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for quack_diff-0.0.9.tar.gz
Algorithm Hash digest
SHA256 17a038bd21986236b30c007582321f187104f5c5c7ea8dfccc88c9c4dad3be92
MD5 3460921f4aefc719e8fffc116eb16427
BLAKE2b-256 7f82e13f0771ccce1a6cfb28eee55ec70d0a2e34f46f370941f8241de32b862f

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_diff-0.0.9.tar.gz:

Publisher: publish.yml on mattcristal/quack-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quack_diff-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: quack_diff-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 34.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for quack_diff-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 2adb5194a39650458f5e42e633860ad154b7382c480e9877f584bf095bad32a0
MD5 fae39f2b23ad37fac1748a44eece76e4
BLAKE2b-256 eab4d9439c0845ccbe212e88da269df77b7a3508c8e09c1eae49921eac146bad

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_diff-0.0.9-py3-none-any.whl:

Publisher: publish.yml on mattcristal/quack-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page