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

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.29-cp314-cp314-macosx_10_15_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.29-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.0 MB view details)

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

dvt_core-0.2.29-cp313-cp313-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.29-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.29-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.1 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.29-cp312-cp312-macosx_10_13_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.7 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.29-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.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.7 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.29-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.29-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.29-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9697152b1841ecbe53ac8f3a9fafea370bf9b1b8a46313ecd0ce0b5d02c08f0b
MD5 eef4e4c51f3a417a1dc491774f291367
BLAKE2b-256 977ca753dbb498760023f54eb3f5a3e61e4c8976fc7c78d0e8d73c3802142829

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7349bfd3ea7c1286753bb7025baa2d144f562f72a06bc86ab523acf56fe3d84c
MD5 f775929cd078e0a1ff549cb58f885920
BLAKE2b-256 3dcab6dd9c49c62bae9a7110ad0cb7b73f637beb89f314a1c28dfcb02dc11988

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a0d9236675d452f1fa7ffde8c19838914959bed5ebb251b97ee8b121c5ab67d1
MD5 a3ffcea3da53a2d29844dced3e34d0fe
BLAKE2b-256 2d4249ae32de138991b8974f9643ca50774d81ebf619fd09f9a01cd48d9dc3e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.29-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.29-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.29-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 13401b1276ae2ed77f57a21dbd19f169b003aef817f0051dbae92d3d12ecacbc
MD5 249e563c95c4b7d0cde3ab0b61f9a886
BLAKE2b-256 aa79a95dc4d035cf28c803b542a532f9ac4f7138e53d359a545e581a69d1b933

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6a550191897e3ad33b1ea65fd5598e9381e942e946b2817712b14db86309256
MD5 cc9d06fddaac25494079e68350c392b1
BLAKE2b-256 01fd481207697c2fff32d105acfe652b5d3720f54b0d1a642c58f74db67b0792

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a1add1c4921da3cd3bea2c20c3cc4767dc68607b2dfbe127699adad259f73c7d
MD5 d1d1111072b03c085d159a33826b3ecf
BLAKE2b-256 a4fda4a895dc622a3e12e34892216773e9d83f15b1c882d96fa469a9a0e7e9c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.29-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.29-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.29-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 35b234b6223c54d5a11e93e046389a99a449c49d6cff2fb6be7a221e280478b4
MD5 40d7d62d1d72084d20cd5acc290fc91f
BLAKE2b-256 988b020c9ff6666ead1915c333e93a20b033ea208db67f8ccb1d96c7011d23d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 64478aa93fa93d457e460918273e7cd927425b9d5eccddc0ac5bf329eea63721
MD5 44159430b28c52b4e70978269b55c9ee
BLAKE2b-256 035e9f226acaa9ba0160299390cfec37f83a7892d67c0f994ed29cd291570d0e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0f3538525e4387dd3b5cbcdb3fc745fc6eaa23838e403e8c68d463b5b61a3165
MD5 4a6c2bb4f638e4838569b80bef06c8f6
BLAKE2b-256 20d8d8e82baf986492fd36ba93efea0cfd0a770c83e4ae6935f640bca462a0d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.29-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.29-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.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b20023d77b6706ee4fc43e34c327e91fe1c786eacd6c4ec204e1154b6e739126
MD5 a499d4faf8a649fd52f780ca63d00f4f
BLAKE2b-256 ffe5e3e4346a8a9282974b9245119a92c7464647fd00091220745ac0a780f6f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19d8c41fe13288e777db0075fd75f24e45ec9b3fea361e94648263e277cddd4b
MD5 65ac36e96b9915060c3574c8896a78de
BLAKE2b-256 d545b1797bf73c8ff0b2622975316f28cef551f10d9f1b6f1863a5e09270878c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ed11979bb59d73b6bb9e4c78f103f99247c60dd1c996aab50b63418a0966da5
MD5 cc0d03721d3d363697017e45eb627ff5
BLAKE2b-256 28e97a9b15e8990771c664484b273adf180a126357d92ed3011b0735c7d1ee5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.29-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.29-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.29-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e202f09bb4a391dfefa4ba2df08a667e3ce41ba6d9a0578c627f934c2088cfb
MD5 efcb69a5962622a8e4bf55e63fd9aba9
BLAKE2b-256 dd09b36a4f90069d13f345fc9293fd52de945ba2ff989c1c85a16caa812a4c33

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 556a754cc6fc0a4954e1aa721c08e5e563551b668849a400fa83ddd0fa5d9089
MD5 896d72937191f62d447731e6c0d58926
BLAKE2b-256 18b930d84743dccfa0e8a72083c46e5dbcbe6872374811256204bd28905bb184

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.29-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c4ceffb1a3563d568e2fdf2463a0585254e4d5ed914bcf88ff40e8170de931bd
MD5 0e8254990abf8bff607152d6e26e4957
BLAKE2b-256 4bfda08af5d2f33f8cffe3a1c2a0808dec3a9de704510fa85a576103eb0d887e

See more details on using hashes here.

Provenance

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