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 Diff

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

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

Time-Travel Diff (Snowflake)

# Compare current data with 5 minutes ago
quack-diff diff \
  --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.4.tar.gz (129.5 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.4-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: quack_diff-0.0.4.tar.gz
  • Upload date:
  • Size: 129.5 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.4.tar.gz
Algorithm Hash digest
SHA256 5cec8cbb320d6bd3ae78005078a2b3df9d823470d63d73ce110042f021613718
MD5 dc85abaa90db019cbcf1e25a30ad12e8
BLAKE2b-256 9ae217c3823130f8c4a462c3532d5a171d9eefdca36568b59c02f2ed3c7a162a

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_diff-0.0.4.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.4-py3-none-any.whl.

File metadata

  • Download URL: quack_diff-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 30.7 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d87679d976bbb80ef090779d77dbc693654b3c850b4a7ceb8a0e111e59bef863
MD5 45e2db6dcb624ce34490bf6cb2634501
BLAKE2b-256 c0f88ae4c04895de8d885ea61f96ea3c11b2b64a2fb7c26ee5da770cc39dc9b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_diff-0.0.4-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