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

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

dvt_core-0.2.16-cp314-cp314-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.16-cp314-cp314-macosx_10_15_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.16-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (14.4 MB view details)

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

dvt_core-0.2.16-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.16-cp313-cp313-macosx_10_13_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.16-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (14.5 MB view details)

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

dvt_core-0.2.16-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.16-cp312-cp312-macosx_10_13_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.16-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (14.9 MB view details)

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

dvt_core-0.2.16-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.16-cp311-cp311-macosx_10_9_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dvt_core-0.2.16-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (14.1 MB view details)

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

dvt_core-0.2.16-cp310-cp310-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.16-cp310-cp310-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file dvt_core-0.2.16-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.16-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 607bc99490b3529d82707e0a6e3545415c2208daad810c8ad07e8d0aae0190b3
MD5 8624f74ca0df0b82db0386934cf21aa1
BLAKE2b-256 ac6e77dc73e78f65708241c1933fef34bd1f6d50b5585ee2319f9eac664f244c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ffe771c81f32d1c763c9130f5bc9d7e546e607c243005518917e7c099605a1a
MD5 612aa679e27f82256babddb8f29f1913
BLAKE2b-256 6d630a39b72b2e3693afd32948823d3cd432659fea8aac981977208d2dae03c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 77f967d1ab3e43a1319a4b0060bc780ce9d93320759d74354113892a064ae68a
MD5 9fdf09a64b99a35ea442c6a463ff216f
BLAKE2b-256 6a822e1a9166d6fd585325c5e38c5923ae2c26c85e865d28cf54d9a31d546c57

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.16-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.16-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.16-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 94cfb578b4089ab93dfe6227401bd3c05d571c53671264b1c0d51d3599dcef7f
MD5 83976bbe4a1141725e55426080406744
BLAKE2b-256 334f141c1b55cafae675b7c3cd4f0eefd3d789868302785c49434fa0056867b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88ca9ebf94b42dd97a686b1d8ffd0b8e624042e238eb41e82a45bf33f9ec7542
MD5 55c4068fa6a631bc39fb390acc572836
BLAKE2b-256 3fc49ce811d6544f5eb0a38c08bb7cf63b7e95fa02f6ea0f56b1c37793ee90cc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ea1da08680c3a8d0fc9f2292407bdd37a86f92f7503a66b37adc4bbc7e2a61c3
MD5 dabfae8a16d73e91cc02814bd8647c97
BLAKE2b-256 2ce7c8fa45228fa7950cffe44cc7e0fd3ffc1fc50bea50746b3ec69c8b312702

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.16-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.16-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.16-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b83ac15f06348e00e511b8e92b764241e0788d0bfae6c7dcbb38bf9714d403c
MD5 a5169e6ec6a5bd747f4d0d4f186ec3a0
BLAKE2b-256 500eb0ad9dbe06c26dbb1a22800143bf550633a229ad9840a1227fbf65a7b73b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ea5d6f8385ff9af52c6a070f33ced56faa38d7e6ec6b5dae7193fb6e504cccb
MD5 485f3199b7f31dffca3a62db472c685b
BLAKE2b-256 e24af408e5416a2b9d645c00545ec3c263f12728dcbc1a1d6d762338b37fe916

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7b719de117507f9da4bdd69d5142071f90d1f7a7bacbd2af9d0ff5d3d98cda9d
MD5 c505fe87c0ebd641b4d66c2cbd319713
BLAKE2b-256 606b17bf0c8671077e282ed02c87da1a62cb9e53eb598199135c6a63dc777833

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.16-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.16-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.16-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e3e061b81adf3e97832312198d4c77c489e2e60233da4fff26e642d4d3612baa
MD5 ef53f6c10669be00fe776d7d81d39863
BLAKE2b-256 06762e27d5f31c7b5ea814b6441b057fa396819529c7b557a276d19fe24a554f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e0252fa9f0b0e3c59d38bffeaa2b7f40bd9746e47657facc35630cd226e097f4
MD5 66d6baefc5a2e887f548ba0bc279aeda
BLAKE2b-256 85205b987aea7063afbc00ce473ada2c673f13ae3d693e61902ec10bf6ac3c73

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dc6290fc983d6e32a0bc3082ca343f68db4debbf8082e9b99d9b3362d4ce37ab
MD5 092ef6925131efddb15240b75f9575fb
BLAKE2b-256 70bd3ae6d5b1ba56e1dfd3a95fc603057754d9007ef27f6e68ddcd41f0182e43

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.16-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.16-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.16-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a218036abfd3dc811ba95724d4771c46e38b59e54a1ca09fe77b6aadb5e89e35
MD5 bfad38fe55dc546e7eacb0884ccb087a
BLAKE2b-256 a97e24bb9a649646c413f1d4c0bc75672360ff17ba8fbf91c52d4e0c6fb727e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8851eb54c2797f008970ae5c848e907440025bc8f78e9709f8c661c95cdd6610
MD5 bd4109104db09ac27e48306dfd9a5437
BLAKE2b-256 aa03e20b01f96615b7fed156edef1fd4c2077995d1285d8f268f5023b34387c9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.16-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ee68bd37934e3fe05b8e1b0ab685f7b2bf91e8930c97a2a4d1179d2e642bd779
MD5 51bd82647412a9bb444312d6e2a24dd7
BLAKE2b-256 6eefd36ff2147f7c207423b44a6f2ecdcb30ebc1c52eeaddf1657f8506ed79c8

See more details on using hashes here.

Provenance

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