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.32-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.32-cp314-cp314-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.32-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.32-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.32-cp313-cp313-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.32-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.32-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.32-cp312-cp312-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.32-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.32-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.32-cp311-cp311-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.32-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.32-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.32-cp310-cp310-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.32-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.32-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.32-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9b108b7b9f7dc781d826f7bc41e1d84c26d200e557628f61c6ab0c7c77fb6089
MD5 6c1d5453b1c4050bda8dfa385a29c315
BLAKE2b-256 334284fdf9e47d305d617e08aadef2c59a8959d47eb779bc69e1f62905ae04e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 082bb307dd9fa2f79085c39a77d5d5a209236d6fe30bef8e14239209eb009bd7
MD5 b0228718d78445bacc0802573e6152b5
BLAKE2b-256 53c964f6e1359e2823bf58a16c6164b78e36d09d590bf01269d86d556ba8757a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 78aba558c56bc3e46c2b6459742ee75307c6ad0e0e008cacc3a3d4838d41c910
MD5 d8dfb80696126101c1193f639c23633a
BLAKE2b-256 ff86464ed289530f40689ff6dbfda5873de2ad5b21279b02a53fe347e674e294

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.32-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.32-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.32-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef808ac06d1bf341840870c614c68f97e66a367d458d22ec3379f8fa075f272d
MD5 1373f4af4a153acdfdeebaba1c09d810
BLAKE2b-256 adddcf9c8d467678e402ed6ab345f2ed11be2062f2da4997eaa72d2986708f69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f5cbfe2f85685abdf1c57275f6b5e6a847c7456547350c69fb25763ff760728
MD5 6b46a7a456df1f9cef775b1a2a429a3a
BLAKE2b-256 0bb0953b23949f12159922e0f3111f0aa02b843cbd468f9871e6591341354629

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2cec27ac7980ead9ea2d847ac851e014c5e2d1dd03c875c662366c1a1d2062be
MD5 8b2c05e785b4b102ae7d81835d312007
BLAKE2b-256 ca803aa80f16079efa98c31c25d4eeb7b3902a46a705e45b0a19a0dd00426457

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.32-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.32-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.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe4aed0ca4ad5fcd9c2e47e6ec7501a96bf6313338e49474d60aff9a9e1570e5
MD5 d8097d9ff45b2f214bda2b58b2cf556c
BLAKE2b-256 b8a960ebb840b6fee976657c9456357484e117bb3b7f531c33e3b7054ced22cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c87cfce765a152dd1dc7fc770a99b1e58a6ccc88190b71f0102e506ed00f884c
MD5 4f7a95df23b11de721e603f53bec5217
BLAKE2b-256 6b9b2d50de2931d4138ab602819b9d00db60ec83c996f238f38ec809298ca9a1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 241f67939f556d8d37fc58aff64339a576e7e6751e8e0b9eb5b2bc75454795b0
MD5 6c997e38768440024332e2389368be8c
BLAKE2b-256 98a4d900031caf3c9bb095bf6b675bb574da0df32d5c02518c83b3c111abec23

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.32-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.32-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.32-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e77b63096760a55ffd7460e6e341570ae45af7c763bfe013e7406403f94fc72
MD5 8a5c12c4d7932b343a1b0e01527da535
BLAKE2b-256 6e5d2a70c97bf80c8d74fb77bec4896a71fd3cd5384cc584146287e77b803f68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b75d5a6c16ea0b386fcfa2511479c94c9759e7bbe1d217ff0f60af29387394e
MD5 5ce1ff876c94c670fb47c1db59427db0
BLAKE2b-256 f86961498900b1d002de5ec66e519562d06c4a4263b5d4080b76327080278824

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 17e253e903f380fd4dc7bc3b3da1db9ada43a816567a284ee2dcbb2ad9be0d3d
MD5 a2bf82534c94cd33f233a7f4dff79018
BLAKE2b-256 e914b0c0a5599fefcf2c5eb5f0ad25fea71fc9c0974733d249028f032560e7f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.32-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.32-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.32-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b9c30023813ec574249510f81784bded46a3b0ea637db50ea3743e66105338a
MD5 9e9594e3a1075a9571d0d7c7dc242ba5
BLAKE2b-256 676fc2e22d6170acc915e5b8966a817119a0c1ef9c7b74e602a15b52af5567ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6bd6761de3fc91dd4c4df76e729e9a4401d8b3c4418b2e626b50405d9e94776
MD5 14a12322dc03a7e76e633f982b5c9486
BLAKE2b-256 f2e414065408c5eb52d15968f6e8972c9dcbbf7286472d6dcc94f1741e0af8de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.32-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6edb17dda1470ea7a61ec83f3c5d2aa339d2af50d443e93010d7cee56f246f50
MD5 a6cf32f2ac292a1ab916333b7fea0471
BLAKE2b-256 673487e5633975eddeb6cb4fcdd3bdd8ba605008b5cb332502ac2177a34dd0d4

See more details on using hashes here.

Provenance

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