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

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

dvt_core-0.2.26-cp314-cp314-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.26-cp314-cp314-macosx_10_15_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.26-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.0 MB view details)

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

dvt_core-0.2.26-cp313-cp313-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.26-cp313-cp313-macosx_10_13_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.26-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.1 MB view details)

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

dvt_core-0.2.26-cp312-cp312-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.26-cp312-cp312-macosx_10_13_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.26-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (16.6 MB view details)

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

dvt_core-0.2.26-cp311-cp311-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.26-cp311-cp311-macosx_10_9_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.26-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.7 MB view details)

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

dvt_core-0.2.26-cp310-cp310-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.26-cp310-cp310-macosx_10_9_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.26-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.26-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2cc043a6dfb02e750f1cef7f81e6ea70db1365f68a7d01e41442514e54ffa695
MD5 aa9b5b17928fa74e4c53d57318b3ea2c
BLAKE2b-256 b1b86cf06e5aee802a48e896a307f23e2c3a512f5990d9d0087b12ff70ebdd1e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89a08a277d71aebf2084d84cec0f66494fa2ab8f3b6014460882c3c015cf4eda
MD5 9b8abc2c97435f5f6d95858aa6d2a4d9
BLAKE2b-256 d94a615fb938a68a32ffca69539b859097a239c0b0b3a10e3caba5e2986236c4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 faa2d8e6b468ba734115f4befbead4d2887bd1ea7f2fd6b81352edc9adcf3995
MD5 bdc7a749d6e85677e0bbb710f7c6d70a
BLAKE2b-256 9a45fdc8f7cbad9ca65e25a0212786656e1d543645a3abb23e5a359f0da043e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.26-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.26-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.26-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f9695751dafcbe7013e817703c014aabdbc8750e541cf233b1bffc12c4776b02
MD5 eabc53f7aa8705aa8531ef0082d65116
BLAKE2b-256 18b9312e635046a0206070910fbf7b8154570c28da2012b3d5acee1a31025753

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88200bf708d084526947e516e945d1c4386acaf2adfc8f04fd39699dfc8c18fa
MD5 ff1c7bc078861744b1828a0584f29e79
BLAKE2b-256 3add484ce167160997238c36c0798246220d99420bdde5187a9ae7f139d421ab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c0456f50256061584bd901cdafb2739172b9b379e34bb777d73e98f6568d804f
MD5 e34ea3ba805f52fa1f69fbf1beb0b5d1
BLAKE2b-256 66e2212cb955675903005d7b793ebc2fd5fc3672f3e6cba6c74edb832c229784

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.26-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.26-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.26-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a15e465118ed39f6f1789134b06dfe2c8ebc94bbf22aa61f4293e72e9ce199d1
MD5 14650b3622a7edf9f197ffafac3f7140
BLAKE2b-256 dd2eacc055e748cef967d37cfa630170b0d7e8346fd3299062558cb6a09d5440

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d6f205e01fd49c6b7023254a0b8225d30269a4f23f44393fd220fe0991f599b
MD5 85c2d51292eee87c32476f41783e77f0
BLAKE2b-256 973d5883f9cdb153590bff94f54be45d09eb97aad71e743336401dda81791afe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 dfa9bd6e83b6c9992504465adb172638bb19b3bbcf9e2cedbabe964967c260ea
MD5 0d9cb56151c41056352c8feb2246af19
BLAKE2b-256 e779e3052ea14d011f20482d29b64df0b981831a7888c4dfc620f4b70af9c6c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.26-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.26-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.26-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 60abea53f46dc36cfbb38190e64025c93962fd5273431ecb75e999c37bddb5fd
MD5 4f691969f4701068e09e40c808e20c15
BLAKE2b-256 10c4862d2a3d5aa8475a4478c24948c11b2a820702a89fc092bc6cf18787dcc0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db1c6d516e12997ed8ada045490efb13e5b2249f0135883d339b28f780b82e10
MD5 59c371f0c73e0880b76cfb9b4f13433f
BLAKE2b-256 da03f0f5d3207da09f906b06b943a78109352c90b08953fc26e88b85a5f63033

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f51c97fe7615debfb264a5ffc8fade1f446f2067551ab050fcf17db1b12aebf9
MD5 e9872d9cf324e88647b5ccd3d26ce862
BLAKE2b-256 b53478c83254df0026faa4d3eada14d02c0594c2faf6d3bbc1e3789dc32c3ac5

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.26-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.26-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.26-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0af31861bf79904d121c95a38b9312c277550066bc53a03042fb6212a67f822e
MD5 109e4040d8c1293e5d96080a46b8b5bb
BLAKE2b-256 badfc0c45605f74413908557a99848601e6c212df43b27ba2e6012a27232bb73

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d011d7e65e9711c840ff1bef5fb977ec3dd8fa170ef4a836bf9323ca789437cd
MD5 d44192f8cc85c50028976cc9339e6b16
BLAKE2b-256 1220efde184b2e1ce04d9fb3373eb4bff1b5e70db675f53ddaa218d2aff4691d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.26-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9cd4198b6c9de34bb2c4b69783701808e42b2dd5cd7969f36f0b07e2e41981bb
MD5 9225a4df34061a389a7106da821584bf
BLAKE2b-256 6141fe314a128cb6c648d0dcf3ad7026ae1611f70176f4c88fb2fde6d68ffbde

See more details on using hashes here.

Provenance

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