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

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

dvt_core-0.2.12-cp314-cp314-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.12-cp314-cp314-macosx_10_15_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (11.5 MB view details)

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

dvt_core-0.2.12-cp313-cp313-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.12-cp313-cp313-macosx_10_13_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (11.6 MB view details)

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

dvt_core-0.2.12-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.12-cp312-cp312-macosx_10_13_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (11.9 MB view details)

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

dvt_core-0.2.12-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.12-cp311-cp311-macosx_10_9_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (11.3 MB view details)

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

dvt_core-0.2.12-cp310-cp310-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.12-cp310-cp310-macosx_10_9_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.12-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.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d59bd86e1450dd7d58ce523363fffff5f9a1f2b901c652f7b05b53606b5bf7c0
MD5 cd27f4d4297f67a3b8db480d53fd335d
BLAKE2b-256 8a07f4b6592116ad931aa4eabdbd042b139bed9cc650b68a7b3b9fd67650a581

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8d05dd7147f50f64e37b9d40b80b6fc0ad6a8759b216978ac543b471113c2c3
MD5 78a4e4e06a798e3f1731542fddc6b32e
BLAKE2b-256 22487cddbac1e29cc3f6183eb425e0c68bebbf65bdc991397c85fd6b27d61cb1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 15751a3552abffd4e23a1f4663b0a46914efd44efdbdc764e3d55b4a0fcca836
MD5 3ca758cf71c792e4d7081c61b0fea8ef
BLAKE2b-256 f294eb4b921ed2c65649f7487c5336861706f9d1285396db0e2522f4619f088a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.12-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.12-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.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8677523b3b9306d6340d0eab8073c48358af4cb26dad690d288cf844518643ce
MD5 85f3cebcd0a04ce2069feb692b3fc00e
BLAKE2b-256 12e23261ca82238d5e9f2f64e1a1e5acdbb52fdbcb288aa66c9906bfe8b3f361

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f73c582af91982e1d8232bdc7d260269bdb4dfc60044b15317e7f82b7ba307c
MD5 c298c0af9eddbccb10d343b7005367a3
BLAKE2b-256 9b9e5a4a7b93401d9dbcd4b4b7e81085876656d3dea00a7b7fcbf943c1a0ac7a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8d3af0b962e817615ebc534c6936c0666526641dba9114c749182fdd30ed3876
MD5 8650aded60c6b83035194eef5921c950
BLAKE2b-256 78965de6e30ca1728c0bdd816c3f2b8abb934a67c2f8ba41f994ba7139cfa78b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.12-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.12-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.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee5f3c12f5f5279f97b92e718f4a085c2da1978e21cdca31d6a92a4cb72dc34a
MD5 c788d6ab655f2b5a5a2f969a7199827c
BLAKE2b-256 e7833977375146a98d0058cd438564469893eecfda8ad88e48ef65a101e8da19

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 841ed582d3269e77f6765ef919031805c48f3b4fe4f8568a404c9c05e0e34d17
MD5 9914a214caf9d54b69060e60b2425cee
BLAKE2b-256 96cda4240274f96ad7ce75cd186d5b587050abf493f4e7c6b0298c4c39e80d9d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 894b3544ee7450c03c122e16ea7f8f34957daadbb00887679bcd8c3e0fa380a7
MD5 fb10a14f4286508bd89e264b5f15cb6d
BLAKE2b-256 a151a99966b5c105ce431b50ce9983096ef0aa3da88e0db4e810cfa37b5bf1a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.12-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.12-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.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e08d4ddb57c827d68c4fcdfeabf8af9ea46c3aa61fa8b88fa4fbff8cfd8b417
MD5 3d15cc22cae8d931726c9232c3f7c17b
BLAKE2b-256 a5e0f736787daa2f35253b09c869ffabd60b78426a9ce13e8dd4a8d2c4b57af4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a545a7b4d713ea9f5aff2d5d99006ed98d888c79169edafb8db8d5dd8ecd203
MD5 3f44d6bf04cebbe9440871b82bb35031
BLAKE2b-256 32bec9d6aadc0de8af9a7cf0b39626f1dc1c0ce2b7101ea8f69e78451b4e9fcd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d70184c64419f37d2c816dc60b9b7fa23247b3a3f92254367106dbb2c3797416
MD5 c85129cc1e7cc8c9282b356a6123b3b0
BLAKE2b-256 89bc9baab3ec90a0562b89687481ae614a732fa319613987b135e65595cde404

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.12-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.12-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.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dfc690bbb029805f33cd3d536bbf00a69c191d8e85c3ab461f17719aa089675e
MD5 95cea36f679e5aed942c04e879c210be
BLAKE2b-256 f40330afcaf037fcd68c3a9cb47906ffceed3a385cd13c0b8586cc26c44247bf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 933af3c5d575082b97c5fd661b506376d90c5d6a62be98b334aa48ebfdd89ad8
MD5 566cddb1f8802dc08c433cfe16fe33ab
BLAKE2b-256 ff025eb0285fa62a5ccd611990ed421f1a7e81d0ff7e8fae7ab34bdc243d782e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.12-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 402b56140fdef43a933d5ed38ad1f0fb32b6b696416b2260526db86ae444de69
MD5 6963018f60746efaac5f3c4bbd856449
BLAKE2b-256 6054a62f2240081a00f6085432c7713d5fbb87545995bce3c2c12d695b81b70e

See more details on using hashes here.

Provenance

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