Skip to main content

Cross-engine data transformation built on dbt — federate SQL models across any database, warehouse, or bucket

Project description

DVT logo

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 csv / tsv / parquet / json / jsonl / avro / arrow / xlsx 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

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.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

dvt_core-0.2.27-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

dvt_core-0.2.27-cp314-cp314-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.27-cp314-cp314-macosx_10_15_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

dvt_core-0.2.27-cp313-cp313-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.27-cp313-cp313-macosx_10_13_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

dvt_core-0.2.27-cp312-cp312-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.27-cp312-cp312-macosx_10_13_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.27-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

dvt_core-0.2.27-cp311-cp311-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.27-cp311-cp311-macosx_10_9_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.27-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

dvt_core-0.2.27-cp310-cp310-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.27-cp310-cp310-macosx_10_9_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.27-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21a5213e68b62055259109b213d5a95ad1c04b89d1cb766cf8a1b9aa51a58b61
MD5 2d3676f2ace1183b96c9e8e2cda82e6c
BLAKE2b-256 0adee4abf77c80c4c91f670f9516970eb8c103276e66bf8fdb6559299074fb9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c7599884c9a04df0c1444783e556e42dab949fe5616b6eefaae5c69cab83cac
MD5 28f1abcc193906e030991dd962b74df0
BLAKE2b-256 688de42c2f58f8bb8b2c8a435be5ad9c0c3267067f5fe8f2615a492a9e32ec5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 89815914ebd67a911aea59e05f8f4f281241eec4e31819932aec702ad49bd14f
MD5 d370fc201c5259147a5afcd1467fa006
BLAKE2b-256 0116cf9cef7912ce5bd769530a6f18027bc49f037ef6808c680f6c1e698a576e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 190cd508e2187cc071ae308be4f947d18c5804b1358fa105d8c7dbe1cbd1088f
MD5 4ea015c94ef0af5aef337fa8368d80ff
BLAKE2b-256 7a6815c5764e8ba637ca19bc0559e61f9ba8c6eb85922a75a05cc624abc60827

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b59244ccd704fb2459ad4b029c26bafea4edd25aa7f01a01a9257de629807fad
MD5 b20d1b1f2a6115afd0938f330f441fd9
BLAKE2b-256 62f16469f8e26ac46ebbc1c8217e9123fe94d64a3f5c2a0eb3d2822cc5b6594b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2af441f816981098362d82c02c768c6bc88f058fc70d19f7ebf2ad934c64b40c
MD5 99c4203bf502a903d06e328289ab49b0
BLAKE2b-256 b6a2ac87b156769f73bee80bc0069e22f32aa4ec9d743b2d86f21cc534bdfc2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b99662f72746d14159870ed0adfb03907977baee3a79b9e5648d73a82d103252
MD5 5991f85e43ae70f8e2b959f951fc8712
BLAKE2b-256 674d189ca714ba336a0b78e6babe268cc458e0569ecb7ea868ce73c2dc00162b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8af0b8fc0be0f1dfdf1f5bcde21328d7a7453c97be9da5c9d97361019ed4821
MD5 a1903d7b65f98a4708ee5369c692a109
BLAKE2b-256 3a1774f1d2d1b9176d7564b467a2dff4b1e47ca0378c3c6d17e7ada1fd0d6a97

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 aa205db09d4d553860f889040b665dcae878f9f642204968ea30cf8c010a451a
MD5 496fb251a5e30e4da8f8e5354e5f7021
BLAKE2b-256 d17c375eb9c24e1b28f4babe1b2a2ba07ed642d7ea107498bc1e94615d9a1d1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f1dd4bdd58892002f91053269de303b181eeea363d0f382d4572990791dc737c
MD5 606d9ced28014d8e5fac01dc71fb2afd
BLAKE2b-256 d1f7f05a2a6f137ba5242bceef435a00e179d95782a1bc501c84043e28b7bb37

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9274463f95d6c4f77a2b379ec4b0efc59098c6107a6cfdcc9199acf5df4b4d2
MD5 7a922443837dadfac6da6dfdad764946
BLAKE2b-256 34b39a0d62a7c379e3eef4b5c7cc13b6ffde4d511ef97a03b60348fefe6cdc12

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f8ecbe40cadb499a86e3f5d2f463796b6b2792edfc5178dc9d207979a9bb382d
MD5 41aade3bfe83d1e70d1a2b441d6c802d
BLAKE2b-256 a93927277cd1a518831e2e0353f4fb537ff0440cb1911b28de9483003a842d3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ade455cd2068b4cab59d58094e9114875533c12b97fde432fc20995f4acd0901
MD5 47ae70560ead862a29dc48852c75081b
BLAKE2b-256 67524fdd78a541cbd38cad305acbba47d6bf22c2a976e21aff67ca5b70b3ea17

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56a3179df97c2526a8f9d8aa8a52b97f333a97febced2516000e470bab14ddca
MD5 50c0844e27e3a5c5b9dcdc3661722675
BLAKE2b-256 ed424629e5f36e7bc111eaa8ba446f1246cbbb56a5e52b290bf3f7a8d639dd63

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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

File details

Details for the file dvt_core-0.2.27-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.27-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 79ced06f860297a449b1035eab113cb80599f979b107f59e4eeb27aac95f54c0
MD5 4bef1736c3682e5b27ef14e121c1aad1
BLAKE2b-256 5f9931965add99bd373a32b7812fef278c5e975105f7e12d805dc4066f69852f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.27-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: build-wheels.yml on heshamh96/dvt-core

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