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

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.20-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.20-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.20-cp313-cp313-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.20-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.20-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.20-cp312-cp312-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.20-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.20-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.20-cp311-cp311-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.20-cp311-cp311-macosx_10_9_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.20-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.20-cp310-cp310-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.20-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.20-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.20-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38fafb58301b6c6daba67d7daa04aecc45370320c23ba2f74d7934796166a238
MD5 0e4a3a6616e27d819a76853a4b747d53
BLAKE2b-256 c881d2da3e45bc88257a67798a0ac222c7a40aba6ae33a42f90a684213d0ce19

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de60b0d614213f898f6e83f81a013dbbfe4cb161cbe66107b6ac0a2eae188fb6
MD5 5b0e3054f72a36014f4622d2e7c45bff
BLAKE2b-256 5254dfcaeeaaf4153368e76365aa4ce9461999733cff7b01fa71e448063167d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 34b60baf2b85ec8358a17aef848f06fe8fb63351a1093712fe5071ec52bfdf2d
MD5 f70d350d441789f00256912336f4d460
BLAKE2b-256 bd1cd5f062e61c5115bfa1a6643398aede9da4a9351bba20f8fb1955eec980fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.20-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.20-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.20-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6238bad79442849c2c7368806d1ae484882f9e58f3df6b0ad238a1d8ceabcc50
MD5 9b2e052064773698d3c643202becf88f
BLAKE2b-256 483f1f76d1c83ee0f56fbfddb864696189b9691acc4dc397ee33669a62e57716

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ec1ddca30ad359b6b6172022949d68c932b22a9fab97e17648782527aa3ba952
MD5 75b909524883d944dcd1c3cc62c53d10
BLAKE2b-256 a8351a2a08aa13bc7c7e3217961419a544105013eb55650ad796cdcf1c8f426e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9491c13d200d6115b1f97272b097e542dfb9faf48abd0ff619c7c26fd26192f0
MD5 5d6166c7cbb5f99da11813447bbdefc5
BLAKE2b-256 7d425d138267d4b207085ccb70dbf1d56d7eaf07695185c5e9c8e86d36066a8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.20-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.20-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.20-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2bd3792192eba5533ef6c77c2f34853305ba230458c7ad556cdb6d7c9b572b91
MD5 aae967ed2502eb3aa4abd0b23cd251b6
BLAKE2b-256 179361c4f08b013e84f6a90a4fd5a717c7188f3669b4fe237b0c3e32079d48a2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a7fef5ded4c406129bf435432dcc1c6655a1ec874b0e89942d0f0947366a9df0
MD5 f697afe50a42bdabaa93f4684f3aedc7
BLAKE2b-256 f8e54353605bfec0cf9a7fba374017527008de4a88b94fb9fe74c6e06fc9b604

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9b77be721c08b04a1f55c14d3975a27fe207f3b939fd03bb33796d1cbb61a5b5
MD5 02a5a37252e7fa1994ceed809b36e3e8
BLAKE2b-256 a33d31bf2781dc2d03cacc3910c311c277082de2ea02e44918f32004213ec7ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.20-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.20-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.20-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ae29289b62ae9785b4d1e88aceadbec8effb56b69fda28ef0fa8ab7ebf60965
MD5 bdfb76928ecaf510170d84dec678de42
BLAKE2b-256 b4ee2296ace712482f473bd9536a55417f4de94652426e25a110f7ac071d30fc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df79826abd8059c823e0e9b30aa241e10be2cefe6df2c548c0b3f09a66290840
MD5 c1c81673c5c88d45046fa3b10c155ffd
BLAKE2b-256 269f8c03e6c308d30358c80ae4da864cddf0cdf9db8ef49ce4cc08ad20784a0f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ed7df546985d28dc6d815006960caf6636b2f33be7e1c572878aacd1e2361be6
MD5 0771bbcdddc3aba0cfe3e2606e585cae
BLAKE2b-256 f07e2beb6f15a3e3fe63028e595f5937bdb729998e6aa752954e387f7151fe1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.20-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.20-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.20-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dfe0e5d838c3a201d5b219c4f629bd25eb6f83d48d833b6a1bf23f197f8d7cd2
MD5 9abd8671f3da5aabea17ca748221b6a2
BLAKE2b-256 3e5897f1040572aa041eb94ceafa2fdb05ca69605fb42d381497ef8b87b22fae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0faa13d492f5205712112fe8258f96c8a1c28f1b719402c963d0c993215a19bd
MD5 f9e27109a2db077a779b70a862171989
BLAKE2b-256 ae98c19f788cc9296c5c7295bb2a5afcc5bda4fc5495d4398724a9130dad8467

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.20-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a9a7bfdadbed8b67c6397427c204bef226ddbbec935ce5b6657e4ebd65562ae5
MD5 3b65833ae22f7bc32dee95a6a855ad64
BLAKE2b-256 6e2abbfa635d6aa1533ddecce459c62a8dd5ea089c8b1b33557da9cf3ddea9f2

See more details on using hashes here.

Provenance

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