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

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

dvt_core-0.2.17-cp314-cp314-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.17-cp314-cp314-macosx_10_15_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.17-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.1 MB view details)

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

dvt_core-0.2.17-cp313-cp313-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.17-cp313-cp313-macosx_10_13_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.17-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.2 MB view details)

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

dvt_core-0.2.17-cp312-cp312-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.17-cp312-cp312-macosx_10_13_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.17-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

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

dvt_core-0.2.17-cp311-cp311-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.17-cp311-cp311-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.17-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (14.8 MB view details)

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

dvt_core-0.2.17-cp310-cp310-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.17-cp310-cp310-macosx_10_9_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.17-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.17-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f263f769bc4ba0650f6d971d3e8cab41b1aaade1ee661f1fdf3812d1da6fdc1
MD5 0cfe5962d00d1c7892f3068b59d106d4
BLAKE2b-256 43384fc9f3f08ac312214be7bb507d2acce0738dad609a737c42d4db9d9c45d1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 55c1c3bc57c2cd4750d5d457fc7b9137f373c43baf39e414642fe5797514e5be
MD5 c50d89377f67ca728a4642e601b47dce
BLAKE2b-256 e543f7a221bef8a3df91776207d8798463233ad0ebbef2040848c88538d9c5a1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 d1eaef7a8fc1108210c65ad234887cfe75fa4f0d7c8fa91eaf8c1f73719dbbbd
MD5 6c07087b6c5f6bce81de320d337fd99b
BLAKE2b-256 c82a6a46587b1b33793b71a13ee822f8348bd64cd453a51ea8267eeb73011e84

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.17-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.17-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.17-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19608084f5e843a56a5829fb37562bc703bdee925a04e38f87226d8d109655cc
MD5 5276d9e8a4d2ecfa24645a5c8a5b1537
BLAKE2b-256 4dfcc6d1d825b00293411bacc6ced831915c59c21a48b95cf792c96348a3bb09

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b8f233d1f8c87fac4cda30a720581441654473cf57bddc001b29305bb96c736
MD5 41540c0ff0b863c134853fd1ec5f0c36
BLAKE2b-256 74439a6b5ad2a89d97b1c843572979944263a5ab9ddd9aaa8c2b5848f27ffbb6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6cdcfd1bae804086e960d1d7bfd70f6c384ebeaf1aef377b582dd6cdc542abeb
MD5 99d61c69450206588e6bb01c53bfc0ef
BLAKE2b-256 b03cdd493c3b1964a95beb27b9558567c7681e1e642b43b0780baaace2f9ddfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.17-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.17-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.17-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb5fe5a8f08c1c1de8eac63dbe08303f49d9bcf3e16d35677dc0000da50e3e1e
MD5 57420e855576a77c16fd178c23d9063c
BLAKE2b-256 1e473c0f619b30e1dd1cd9a33a4725737f7e4379dc6e6e7b296c7670fe56d050

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 34903d10ac211028f8c54691f8205b5357ecb4ab7c5e6e760102d9ac29b62c4f
MD5 0438a9353dddbca49cafd1c175a02c07
BLAKE2b-256 7c20935b8752f2cbcdc7da8b60e4c978f285b89a5503449ae5011d2630095d5d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c9185076e3cf39055d8c38cf864c41c1cb37a3a9a9e158832b92f4a0fc9ff06c
MD5 6a159a3829f9d9e01e5724eb6ccb6f38
BLAKE2b-256 ad8c23c3ca7759021921de69172fb81ef2fbd7d8b3a706d708accd6a3f85058f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.17-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.17-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.17-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f4f953853c399ea0c828aae1a8524d3a36660613884edc181950e3e94f5127c8
MD5 8ce1a1a675d9f0ab48e2a1eeaf53168c
BLAKE2b-256 3d843a32579f3d02b0d25c8bea24e73f06982a6eed4d04d2897602920d56295c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 070d36b0d084c82a74439e3021da2b771366982f6115dce3a39cc5b1ae2e8047
MD5 3c989d2a4ce7346b3c4765d8f46f3cf2
BLAKE2b-256 34949989d1b5548987b058890716c65639b3c34a275c1b5a1695f0100f8f81a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 78546b977231043c4f10c9ef712c374cac34f4e2d720cf46df26da81aba1b2f9
MD5 879e879d9ab9704314253bba98300ee9
BLAKE2b-256 2f34990377e3db40e37f598e23e8c159dcd4e15ad53b8e96730f218fd5221a11

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.17-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.17-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.17-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da6d23a7fd818660cec432cb42c17941d4926dc0da091cf8cab8a74e2559bc0a
MD5 400cc0e8bc53dca1a549d807a40b63b7
BLAKE2b-256 f1e75379100a32d22db1309deeee8ac692c95489250ae4ea09373b3ddef54419

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0dca12476ded7b804beb41371da58b49e9eba0a0898718f9cf8357139acf6cbe
MD5 4fedcc3a26a9fa0c2fe99221b292ed2a
BLAKE2b-256 b25b1a916b8d5898008d9ab1bf6f6567dfe31624e59ba810161ffdaba130870b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.17-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0e99c89a301db7f111efcc6a1259354b8e288e1956f90144d094fe865aa88054
MD5 ac1dfacb3760b0337b3256bec150aab4
BLAKE2b-256 16482100db1982a15ace35c4c69cdcad24fa9646c965d7d2675428d4eaacc7bc

See more details on using hashes here.

Provenance

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