DuckPaul
SQL transformations powered by DuckDB. Write plain SQL, test locally, ship to production.
Status: DuckPaul is in active development. The workflow and CLI interface described below are the target design. Early access will be available soon.
The Problem
Most SQL transformation tools either lock you into a proprietary DSL, require a heavy runtime, or charge you for features that should be free. DuckPaul uses DuckDB under the hood — it's fast, it runs anywhere, and your transforms are just plain SQL files.
How It Will Work
- Write SQL files — each file is a transform. Dependencies are declared with a comment.
- Test locally — DuckDB means fast local execution with no external database needed.
- Ship to production — run the same transforms against Postgres, Parquet files, or remote data.
Example Transform
-- depends_on: raw_data
SELECT
order_id,
customer_id,
CAST(amount AS DECIMAL(10,2)) AS amount,
created_at::DATE AS order_date
FROM raw_data
WHERE status != 'cancelled' Project Structure
my-transforms/
├── duckpaul.yaml
├── sources/
│ └── raw_data.sql
├── transforms/
│ └── clean_orders.sql
└── tests/
└── test_orders.sql Planned Features
- DuckDB-powered local execution (no database server needed)
- Dependency resolution between transforms
- Built-in data testing framework
- Incremental builds for large datasets
- Multiple data source support (Parquet, CSV, Postgres, S3)
- CI/CD integration
Get Early Access
If you're working with SQL transformations and want a lightweight, open-source option, get in touch. We're looking for early users to help shape the tool.
Need help scaling? Our Managed Service team can operate your DuckPaul transforms in production once it ships.