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.31-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.0 MB view details)

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

dvt_core-0.2.31-cp314-cp314-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.31-cp314-cp314-macosx_10_15_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.31-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.3 MB view details)

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

dvt_core-0.2.31-cp313-cp313-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.31-cp313-cp313-macosx_10_13_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.31-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.4 MB view details)

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

dvt_core-0.2.31-cp312-cp312-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.31-cp312-cp312-macosx_10_13_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.31-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.9 MB view details)

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

dvt_core-0.2.31-cp311-cp311-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.31-cp311-cp311-macosx_10_9_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.31-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.0 MB view details)

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

dvt_core-0.2.31-cp310-cp310-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.31-cp310-cp310-macosx_10_9_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.31-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.31-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e7ae80027cd05f80b7300c87b836d179f89989e02b7b444a9d771733ea72891
MD5 294a04363d356d68fcb4ccc1995346fa
BLAKE2b-256 ae1b76d17723bb78741fe5269fcd75dceedc63463b29259026e70ac50f7cd392

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd3f4884101b183b97f7911d2e991ff75e867650fd2d7b991dcf446d7d8d2d00
MD5 368f039b94c3a9526c8a9c9510078885
BLAKE2b-256 cae328492f8ff04f7fc9987f8f269047b07bfd55cab18678c9497272b1dca96c

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1f92fd560ae75423eb508acb5f592ee7ef4508d4ac4b420a6d0239b09248bb55
MD5 89e1130ab47c05c08008a502ef01e706
BLAKE2b-256 502297574363af8799d5642037c9b72bbe8f19a5b1ec43cd0c2a6af71e5128ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-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.31-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0698e1a05bb2748f474a743436bfa9d1ce0a9da6c1c94f244aa07d2fb8d425f8
MD5 a6049964ed10b36cf37269715a5d44b8
BLAKE2b-256 2d35952acfe2f03a11ceacb5a86d1bd047ddec6d9f29f04688d4703d00c5d6a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 414e17081a57afbdfc875e82b3369de28c8248f2bd477325da013b2209471aba
MD5 de48f82dc9364ce2ddb664d4750dde3f
BLAKE2b-256 9a90aec9688ea284b039823eda800421b0987797d8ab147cc34eb3e1080cbcb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d0f1716d52bf126a38b109f7f789d308179feef6273aee7ad78c64f759256933
MD5 e75d60fbca24f411390dbb6af1adcaae
BLAKE2b-256 315124de537ac467351279eb1689b428256d268040ed3b4bdf9ba3706fd9a18f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-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.31-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fd2ba318fc8eeb6734cff679a4a1cdcdfa8ee1c65da5101637ea1749426c095
MD5 4d0538579d3ec6b75eabc5668cf70c22
BLAKE2b-256 0bfb7ac89da2e710685ece980fa7b2de3b7349c716dcaca4c92669389d6ee646

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2bce67cdd10ebc36928c697efe1e40c4675bafb34253057670150ef036897e3b
MD5 7d18d17dabc06e25d3009bb92643542b
BLAKE2b-256 c8d1c53ebdb169f90c0d06816be1620fd5fbf218d858c8a427f5041e1577f2ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5035b9e6b552cbdc724c2f9ecddc84f9ecd16ee906ec89de8d897b43ecfcb53f
MD5 54a548e8e785937ffd6fbcc22bf34daf
BLAKE2b-256 f1bcb4afd966f214727d3b18aee34ad298b9b0db4ed9f126eac28499b0867384

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-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.31-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb766f8419f897cc1690ffad87dc8929a21e0204d1ef1056df82b1046bdbb3e9
MD5 78c82705738e4561ff9144ab52349dd8
BLAKE2b-256 88b96aba6e7d2741f1deb57f4de1e9d481d906a56228699343d370e95be03f70

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 166f9c26396c7dfd336283e078bdfae4dd31151a5ebb8eb3484d41c95e336283
MD5 3d89f931967991b5bec4737ffec8ed48
BLAKE2b-256 879bca4176bf2ea879c862734d6853671a216863094be0a84031a1c74268c549

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9852700057d3201c7c29c230e003d187d10571ea9e18576f1827b3cbdd462dd9
MD5 c6623171be003e4d26e03602bab94e32
BLAKE2b-256 08e3ac8771c03cb6ee12f642bba5c845d0f1920f070fff284b100b1097388a13

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-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.31-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bddc68e153dee1dcbfef9a520eaa4d55072f2cc9def9ee68837f3f7296e01c3c
MD5 689c87b1920a5e16e354799edc0610ff
BLAKE2b-256 86ccc1d9872f14619ce56945cf2f3e5a6f60007e134a4c68dec430bfffd343cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 499e08a7b1b5dd6035388abbea0c9cb9184e4d794204979a1c1706e4de0b2588
MD5 af035a2ea74f23948d08c4f1e725e729
BLAKE2b-256 0bff3acf09e895195840cfc60d80febfaf9404f5af5c138135585b3e33805acb

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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.31-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dvt_core-0.2.31-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 188532a4e96545a284340447cb72d7579d94a8fab1dee996a924b6ae5079ae8d
MD5 97ca92c0518411842a9f1a3675685c69
BLAKE2b-256 aff751ae89e8ee14dd1272b9ba7b0e7db429623351ea07273ea61ec835e6ee97

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.31-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