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

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.28-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.28-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (17.6 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.28-cp311-cp311-macosx_10_9_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.6 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.28-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.28-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.28-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1de27424d309ebff3b490eace77cb7047b3813a0a1293cc1a76aa231e4c65213
MD5 f0b50278fb56fa2c554aeb7281593f77
BLAKE2b-256 a01645e22b0cfc4e68d959ca7266324705da6003fb0150659599772bfc667938

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 92033f9217ef0440748eab865a814b0f32ee2dd07e3a9b6d9dfd3b0332fed5ec
MD5 814fc6e7a67c8760017d89af52e7429b
BLAKE2b-256 b01c38d58ef76f2ceca37b9edd960a434fe32685619792f8aa4f0d60403be74f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 c6b740b4324dd1e45c56ecee33222c14a58d1317efc258b13fe8244d0375f2c8
MD5 2e88075ba3fda3e1bdfe72c55e8c4c5c
BLAKE2b-256 b96b4f1e82943ccab06b4af281386fd97b7eaf1450484d0310c741baa017ecdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.28-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.28-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.28-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f5e0e2887554a9e14c9c7d2c5617e7e541cc334008f8dac43bc60e8691af688
MD5 a0c0d9cd0170293a14da35d9ee0ba961
BLAKE2b-256 2ee034c76e224f4680638bc44f02bd28fe04935cc568c9a2c445737856c81b16

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a6a3835ee32631c9e832cfaae29cea5dc6f0e3cd040534901f377bbd20028ac
MD5 68aaab6b15d57c1f8e853791534cc12f
BLAKE2b-256 ee6c93378bcdaebf0b1147076d6b67102307655f5696625076c4e50a532f6aa6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 352f55b16efde002c0f56e9fc46f1e376157d307368350f5f51588995f34905f
MD5 f8e2f850bccce91c489377f15107d311
BLAKE2b-256 c39cb545dc53cd46d0b5cbaed254cf2526f9c72f43b9a59e244ab6cf8df656e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.28-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.28-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.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e89d2696d5e8b4d8a10cc6e44a345505a7c81fcd46d9b4eef724e8ae9b6a8c1d
MD5 739d54d8a6d5a4497ec35ee471a270c7
BLAKE2b-256 5dcbfca95e4a1ed9b0100c1316e05a5330456ad3c99572a068393a1539c9b4e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 711c1142d9edc4e36ae703f8928a58c280e047568f0b73e3c28bfb50b2a21fcb
MD5 51f6cc1d83150f301e7c9c6b5cf9c496
BLAKE2b-256 f730359a311c16e150f9f2c10da9dc4baf7f8a6a75033a93a52df6c4bea11dcc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 df06b6263afb9bc66503a7ec94ddc14e6d0833d12ae733c33708f9454a4c8d94
MD5 f1e1c3e40c451cc0af1ceb33e0261b85
BLAKE2b-256 d7d3696cd8cf035c691ccc719adb18c2182e6146cd7460e840ddb97b25e39259

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.28-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.28-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.28-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74aa681f60f8b9c81ba7c4a7b1144e5b51ebd56a4185318b0fe2701deeb8d59b
MD5 b178863b2074a12ac7462a109b47886e
BLAKE2b-256 bbe6c850c7aa4f91fa38606aa61b9c4185bceff20ab72a89172b0e059d5eb249

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f80b47a00e4d7ecc0952e1ef917a4cf77556e2a734a65f424396dc317555986
MD5 87e12b361b1c71258c766b2a825085f7
BLAKE2b-256 dd92e3b1751b00b8f199d570fae8fb8e65dd0e72a30d003aab80a192282a4737

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 54f271a13e8453668020228db541d4e87ed2f3bad0c13f88a7bb714f387fe069
MD5 d63ad8394c95f3c187e2b6f1de2790e9
BLAKE2b-256 b5b43a6514d2ef98a7f14a037d3609171d6405545921e1670bf43c96c88d66b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.28-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.28-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.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe29ecda2cfbe269dca2cee9ce14553395967f67ed17e6959da42d418c52fe29
MD5 4722a5e9bc2dcbc1e7c52f6917bccd05
BLAKE2b-256 9356ab3afdd6a6d6328efe6162c962840318da04c7d32a1a63286ee19931a2c4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41137449630a74c835de8ef7582678f69fded5f09e08949cfc0f2a0052d04b5c
MD5 f3aca518dca4e6546b56503851e7f0de
BLAKE2b-256 931487b4ca01b3b25e2ff631667c337280b9e8f58b508665c750c4713ae78dd9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.28-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f17b3dd48fa4f5223930532693681b82c2bec99217f37ab6e2cf6b98a34a7ba2
MD5 93d19054188fd2341d6531b31a020669
BLAKE2b-256 a93a2a21c38a5e9b27d7cdb74a9df2f13ff8d62699484d703c6a545586528a78

See more details on using hashes here.

Provenance

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