DVT — Data Virtualization Tool
Any source. Any target. One SQL project.
DVT is a cross-engine data transformation CLI built on dbt. Write SQL models that JOIN tables living on different database engines — MySQL with Snowflake, Oracle with PostgreSQL, anything with anything — and DVT handles extraction, federation, and loading automatically.
{{ config(materialized='f_table') }} -- "f" = federated
select
c.customer_name,
o.order_date,
o.total_amount
from {{ source('crm', 'customers') }} c -- lives on MySQL
join {{ source('erp', 'orders') }} o -- lives on Snowflake
on c.customer_id = o.customer_id
where o.order_date >= '2024-01-01'
pip install dvt-core
dvt sync # installs every adapter + driver your profiles.yml needs
dvt run # dbt runs what dbt can; DVT federates the rest
dvt version # (worth running once — you'll see)
Website & full docs: getdvt.net · Quickstart · PyPI
Architecture
DVT is a wrapper around stock dbt-core, not a fork. dbt compiles the project and runs every standard model; DVT picks up the models dbt can't express — cross-engine federation models and locally-executed Python models — and runs them through its own pipeline:
flowchart TB
CLI([dvt run / build]) --> COMPILE["dbt compile → manifest.json"]
COMPILE --> STD["standard models<br/>table · view · incremental"]
COMPILE --> FED["federated models<br/>f_table · f_incremental · .py"]
STD --> DBT["stock dbt executes them<br/>on the default target"]
FED --> HOMO{"all sources on<br/>ONE connection?"}
HOMO -- "yes — Sling direct" --> DIRECT["whole query transpiled to the
source engine, streamed straight
to the target — no staging"]
HOMO -- "no — federation" --> DECOMP["1 · DECOMPOSE — SQLGlot maps every
table to a profiles.yml connection"]
DECOMP --> PUSH["2 · TRANSPILE + PUSH DOWN — minimal
per-source queries, each engine's dialect"]
PUSH --> EXTRACT["3 · EXTRACT — Sling → Parquet, parallel"]
EXTRACT --> COMPUTE["4 · COMPUTE — DuckDB joins locally"]
COMPUTE --> LOAD["5 · LOAD — Sling delivers to any
database, warehouse, or bucket"]
DIRECT --> TARGET[("target")]
LOAD --> TARGET
DBT --> TARGET
The Sling direct path (0.2.5)
When every source in an f_table model lives on one connection, steps 3–5 collapse into a single hop: the whole query — joins and aggregations included — is transpiled to that engine's dialect and submitted to Sling as a custom-SQL stream loaded straight to the target. No Parquet staging, no DuckDB. The check is automatic and per-run; any failure falls back to the standard pipeline. Add a source on another engine tomorrow and the same model silently switches to the federation pipeline — the model never changes.
Execution paths
| Your model | Who runs it | How |
|---|---|---|
table / view / incremental |
stock dbt | natively on the default target — whole-query pushdown by definition |
f_table / f_incremental, sources on one connection |
DVT | Sling direct: full query pushed to the source engine, result streamed to the target |
f_table / f_incremental, sources span connections |
DVT | decompose → per-source pushdown extraction → DuckDB compute → load |
.py models |
DVT | locally executed; result loads to any target |
Standard models that set a non-default target= are refused with guidance (dbt silently ignores the kwarg — your model would land on the wrong engine).
Design principles
- Wrapper, not fork. DVT shells out to the dbt CLI and reads
manifest.json— it never imports dbt internals. Your dbt version can move; DVT keeps working. Every dbt feature (Jinja, macros, packages, tests, snapshots, docs) works because it is dbt running it. - Dual-dialect by design. Federation models are written in DuckDB dialect and are transpiled per source — they never depend on any engine's syntax. Standard models compile in the default target's dialect via the official dbt adapter. Result: switching your default target (e.g. PostgreSQL → Databricks) is a profile change, not a rewrite.
- Pushdown first. The fastest row to move is the one you never extract. Filters and column pruning push down to source engines; when every table in a model lives on one engine, the entire query pushes down and nothing moves at all.
- Your hardware does the joining. Cross-engine compute happens in DuckDB on the machine running DVT — source databases only ever serve simple filtered SELECTs, and no warehouse bills you for the join.
What DVT adds on top of dbt
| Capability | How |
|---|---|
| Cross-engine models | materialized='f_table' / 'f_incremental' (long aliases: federated_*, federation_*) |
| Incremental federation | watermark-based delta extraction; persistent local cache between runs |
| Per-model targets | config(target='other_output') on federated models — results land on any profile output (standard models are refused a foreign target) |
| Bucket targets | materialize models to S3 / GCS / Azure as Parquet or CSV |
| Python models, locally | dbt-style .py models run on your machine (APIs, pandas, ML) — results land on any target |
| Bulk seeds | dvt seed loads DVT's four file formats — csv / parquet / json / jsonl — via Sling to any engine, with enforced snake_case columns |
| One-command setup | dvt sync installs every adapter and driver your profiles.yml requires |
| Connection diagnostics | dvt debug --all checks every connection on both layers (dbt adapter + Sling) |
| Cross-engine catalog | dvt docs builds one catalog + lineage UI across all engines in your project |
Everything else — profiles.yml in ~/.dbt/, sources.yml, ref/source/config, tests, snapshots — is standard dbt. Existing dbt projects work unchanged; sources gain an optional meta.connection to bind them to other engines.
Supported engines
Every engine supported by both dbt and Sling is a DVT adapter — as federation source, federation target, seed target, and default target:
PostgreSQL · MySQL · MariaDB · SQL Server · Oracle · SQLite · DuckDB · Snowflake · BigQuery · Redshift · Databricks · ClickHouse · Trino · Athena · Microsoft Fabric — plus S3, GCS, and Azure Blob as bucket storages.
Anything else (MongoDB, Elasticsearch, REST APIs, …) is reachable through locally-executed Python models. Details per adapter: getdvt.net/docs/adapters.
Learn more
- The federation engine, step by step
- Predicate pushdown deep dive
- Switching the default target (lakehouse portability)
- Pricing & plans
License
DVT is distributed as compiled wheels on PyPI. Free tier covers local files, transactional databases, and Python models; Pro adds cloud buckets (S3/GCS/Azure); Max adds cloud warehouses. See getdvt.net/pricing.
Metadata
Release files for dvt-core 0.2.54
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 378.9 MB
Release files / dvt_core-0.2.54-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | dvt_core-0.2.54-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 57.4 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a0f4bfff223a0bf66d26d805138092cbba531c95655b1dbf41e8a76bf46a6f77
|
|
BLAKE2b-256 checksum How to use checksums |
b846f2e3a349f62584ef9b1574a2615af2a3582f7ed82a19113dc63c4b25afb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | dvt_core-0.2.54-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5add64c9e10e51c45f12d20c14142d985040f16c53568790bbeb843fae12fdb6
|
|
BLAKE2b-256 checksum How to use checksums |
0690718542a135f8c4f47ec74813e783dbdaedcb454140d5b5dc7b70431a485a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | dvt_core-0.2.54-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 8.8 MB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
a08c882513a197ad34b95b414733101e3a95195051a1344dc0c448e9aef971c5
|
|
BLAKE2b-256 checksum How to use checksums |
076d6bd95bed22e6c1410577655b44746e3bf3ffcb2af7522f3c0259e9c25ea5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | dvt_core-0.2.54-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 58.1 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f075d8eb836503ff6d0de4c19e5adb74f7fad48c59ccacfffdb949ed0d1c1ceb
|
|
BLAKE2b-256 checksum How to use checksums |
abef2e353662be3b90f540c81291933ac62ca075432a00b1f7bc96f2230ac3d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | dvt_core-0.2.54-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
51875433b928e6def7d51533d90358e86d2bff83596e2ef237866bd43ab85306
|
|
BLAKE2b-256 checksum How to use checksums |
c1a11af7a912367eca65b43ceed226333d6f781d29d6b6c8610dd4c9601a1f52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | dvt_core-0.2.54-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 8.8 MB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
e3ea9cd6724a11937d7381706785f4f74d835df29b494c271aed78c0ac661575
|
|
BLAKE2b-256 checksum How to use checksums |
d66a079476b8ec99559e2533f96adca7779f94a4417df72e950b3383495d721d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | dvt_core-0.2.54-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 58.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
31e44de7cf46b8f47f1050c1df6ec77f35708bddfc6fcb2c0866f82cf281c420
|
|
BLAKE2b-256 checksum How to use checksums |
a1e55dbf36a51d77193c9befe9f9861510b57aef83c7a2c6ea7f7c07b84622e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | dvt_core-0.2.54-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0165fdb80d33c1be3e5ccb06889f7da90a4ee52ff3c38a2c4ce21137d147116c
|
|
BLAKE2b-256 checksum How to use checksums |
3490525c56d35bf81dff9e6dae2d2587accaf7ad6425b708c49cb88d1b040636
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | dvt_core-0.2.54-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 8.8 MB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
463014d44aaba9eaa37cdc7e73c7b35c93cc7448d1186e853c675dd2d035c7ce
|
|
BLAKE2b-256 checksum How to use checksums |
acdfb02fbfab75da9d69ef67976ea01b1212ba72e658a2c3dda444f2d11f9cd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | dvt_core-0.2.54-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 60.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
382a305238bf0a22b059de5695fb1f4bd3a4b622da83a68c846717ae9eaf925e
|
|
BLAKE2b-256 checksum How to use checksums |
b21d6a125f8625dac696093f0289fa07bb218c9531dd39fe1176acab2c1be09c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | dvt_core-0.2.54-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
045aa92edae93cd03726c2bcaa24086ddfa2e77abf0c6f0131190f44f3b3c9ea
|
|
BLAKE2b-256 checksum How to use checksums |
5e0af31308d5776a9392136f7cb326ed5fff4666bb2034b871e00508eb3ba95c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | dvt_core-0.2.54-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 9.0 MB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
83f3687f166fc6d46d9e7363c216135962d99204f566c2f2cf695a51b9794e8a
|
|
BLAKE2b-256 checksum How to use checksums |
bc15dde9d853e1eb4c296db8f8c43defbe4fe6aa7595554abca87131c66a7e0b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | dvt_core-0.2.54-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 56.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
3a3691e3be7d47c398a5b2defc50bf9f182aa599815c8d8b9da6c0badc5cec25
|
|
BLAKE2b-256 checksum How to use checksums |
62ff2b610318c868aed09839cf6987b7a1b2cf1976c23498d3c73127bacb69db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | dvt_core-0.2.54-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
649da8369c035d1cb5fa47dc3e2f03943f4d2f8610de5dd801a211289cb8a5bc
|
|
BLAKE2b-256 checksum How to use checksums |
79ade829a7f31850c9d08a431f2ff89aebf4ebb99e77b646eae2f529fa56807e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / dvt_core-0.2.54-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | dvt_core-0.2.54-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 9.0 MB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
1efef15608db7861ccd6493f6e5646cecf951d6234ce61eff6a1f79a0698b7c6
|
|
BLAKE2b-256 checksum How to use checksums |
a2a74d70b32a24b915ccd4b272754a2a0fd71f31342f2bbc86427e52094f88f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency log