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

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.30-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.30-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.2 MB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.30-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.30-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.3 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.30-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.30-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.9 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.30-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.30-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.30-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7584056f4fc8acda4ea10e2c21fa5b4c560fed0d7e62dc256febecc6ec319616
MD5 359a8bb2730c44010d0182c4c4cde153
BLAKE2b-256 52ea973d1c45eeef0fb4538f851350b21d8518101d2fac2328b0adbd45fa9ea2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1173431406261bcd1a50cf4f41359fff2653b737788099f9cb2b11c7b8ad305
MD5 8b6816b7510aec9376544b807d4d1d91
BLAKE2b-256 1863bbda2743a49c1993fc2f2388aa03cdd845dec40c4bf2b4c6d3bd7369f058

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 7792801db4dbcc96b5f1d35498ba8dae818ec33396069c1ef0006a8d77964dac
MD5 b514c7e3c4979385349173a4cacc3a27
BLAKE2b-256 a732d9a5e3a3d93d2fb58b028ba0c8c441e8fe7aa2f86655f74ab037aeead482

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.30-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.30-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.30-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 50080c15e4a2c6e5ec897dc97904dd5bab7b979f8e2f731565336e74ca6fd8c2
MD5 0dac72c01fe7dcc1555fbf21bf540e61
BLAKE2b-256 71434bb36762c90c9f37a75ac43028aa5163c12ef86ab09c182fb74e65f8f71a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e279a135b4d0bbea62301a414e81ff26c61e179ae4de5a1fb103db73d3b7fcb
MD5 20cc9b90b6376911d7157f550e7da299
BLAKE2b-256 1d634ea1152a9d97c95a21a94b9c6f4ecee8dbce5d1f2dcb76835a004f33ba1b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 66934a7f7719391d75144e2a7b0b88c345e91e09c789f4135c1f792d2cb941c0
MD5 47c827ec66fc5d818e6f3cda4c1cb1e2
BLAKE2b-256 0e7b1755142bde6738317a71f4de172b1380b9008a63bb4dff640911e67a855b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.30-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.30-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.30-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f3a07da6560ec279357f6dbf4a5744f7858fd1c58cd7b1ed6de56dffa035f391
MD5 416084b50fcd51a000eadcf458707fae
BLAKE2b-256 c842e5c8eeb5d27d6d475a558852c38fdca3203b2cda495eae45b4ea0bb1fc92

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6826b5c039344c658819aafdb1c97366dd2159cdfb221d511e04b5f4cfcccb91
MD5 40c9e11f157b3c23a41abd98679bc311
BLAKE2b-256 ee3796a6d8157b95dcef08a5fb2003bee6d035b331f680c4d5168c3c32dd7a94

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a2d9d87d0ebacae338dc581b0c4c9f1c5a203b0a436844ca61afab6e442ace15
MD5 6e6bd171d53032ab92d04e95a1bb4758
BLAKE2b-256 8d97321d3c15d7407d405daa824098d469189c15388ef0096c53937ee3b91643

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.30-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.30-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.30-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 885bc36a54f19d323a47612884d82a918abb49730a77b662310a1353318fcd4b
MD5 1cf334d4d5c8cafc78e400d9dff6ded6
BLAKE2b-256 49b56b2c8ba0a7a574f6ac9900ba212da25cae77f2893915ebe4d8d0287f833f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ecb10f3f2156b70d2f3512cb6e081261f72699f2b08a7e1360c16911d7898fa
MD5 e90b9ef843defb889b1118829719d15d
BLAKE2b-256 dcc52225b8fb6229e05f549d54f49e82ef053e16394bd29125c497ecb2bf192f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7294f8b98b61e5f9a917afb2f1664fba24a9779aa03c1d034c69d52a7fb0c293
MD5 285bc17a04fd300135ad67be8f5b7ab6
BLAKE2b-256 a173bf4704c9dcbbd3d293711c3664bede2c4a3498e99f07b605cd9c43089a20

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.30-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.30-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.30-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 101b93647bdf0f92233b2937d7cdd085e79fb7d899e1d77f8f1c9349337339a5
MD5 4a919207ee9edac4b58f42cb122ed69c
BLAKE2b-256 3f6312b64b10adbec982926b83666116b058542ea5f39e2783059e7aab088a90

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a0b05b0d7255f033c353a828ca26857cc0993b8989a75f1fa8d7f6d1d072299
MD5 8ecc4523d1c300f57b4e7fab6bf80d7f
BLAKE2b-256 97d496bfd19f816cdd7dab57e661a5ec8e19170756d09f4562e4d81b3d373b20

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.30-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 48efa789b857fb3326a4432483644f688787829c6b964294554214d49fb33706
MD5 bd4cfef08b387148331a3db31bc21c72
BLAKE2b-256 08c00d3376608bef87e519b28fbe3204e1d09ca2fc12e3d18a506207d02036ba

See more details on using hashes here.

Provenance

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