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

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

dvt_core-0.2.22-cp314-cp314-macosx_10_15_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

dvt_core-0.2.22-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.3 MB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.22-cp313-cp313-macosx_10_13_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dvt_core-0.2.22-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.5 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.22-cp312-cp312-macosx_10_13_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dvt_core-0.2.22-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.9 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.22-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.22-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.0 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.22-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.22-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.22-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 45d64f28b7f7cd1598f6bf0d628b7d9df801ca3f4dfc1e07db25f51eed1c348f
MD5 d86ae557d742faae8d1b198be0582202
BLAKE2b-256 8cdc215a427d5c112249d35a4ff670c2aa9414a913302351656f84131f4cd7ea

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab6d1e682b1674910680ea888e4c5d159a42db417ca00533821bc4b408cbea81
MD5 b1b6530c5bd3716dc4a7e6b22c7b1c06
BLAKE2b-256 38785cf56432c1b45a1cfa421fc00fc4e981345dc2b2bc78ddaaea68671d4336

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 53149f6f466c934b82ebcb984ca52b90e5f9359a06b207fffd98b8ccfee51da5
MD5 c79e8007a8a424a5a7a32a0516d414ee
BLAKE2b-256 2badd42f1b2c01806a755b594846e914a35a9f193b5550a425a3cf8e537443cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.22-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.22-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.22-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8b26a6307834d2bae758bf33ac2df38078946655faa3d96e372c223a9d0df4ee
MD5 6df0fd9983ee35638878e2d5f8acba90
BLAKE2b-256 567d394ba7587b3b81316cd619270fbfaa9d9bba83f1166363caa39ff2c746a3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 efffb7fb4776eba3e2ededb1086dd235064548d01bc5d490a071b4ee32627546
MD5 8028d37e35249fa217ed15e04a216266
BLAKE2b-256 51b60902af32915c66b47cc0c25031457b2513f0232e337357c4f50317ef403f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a3aa907fe02189197beb8c5ddbf1948c74a6d37c1aa83aa85a31a006cf6ed12a
MD5 94f222eb51eb33391ab4b36abfc4251d
BLAKE2b-256 89c945cd25c32d0f3031a64bfe04f9474c2a93f3b3870190e8523b7c6f2c0cd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.22-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.22-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.22-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef2e30280400e717023b44d15efd57f7f5064a31bb2b8498a256871d157bafb5
MD5 0aaffc735da7af36fd6252312523f8e4
BLAKE2b-256 accd71599019a8937eb3d832c3916727994d854b52a84313352fed6ccc2ded3c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5e01344a8cb522cdb5ba6721d65dbd5d9f4d0640e14488bffeae6f6adcce30f
MD5 31facf75cedbcd394cac1a17cf48ac8a
BLAKE2b-256 64e1e963162062c3e04e204e2cacdf419e81a864250ef3111ae6a23fa4901432

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a423cbc34770d3c5eb5f3454cc0d07153d619378b521b456bbaeae2b4b59284d
MD5 54b136b8291ff23e53afed5a9c4f5904
BLAKE2b-256 78f0c48a3039fbd105e82f551243148c2f8e0a66301f0f4e14337d6ef112447b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.22-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.22-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.22-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e2a3571e7e275dcf5e7105f5c7fb2c6b257b4843a0df544c32cd1023df296b1f
MD5 9f9842a9ae6da1cf48bbce67ea4851e1
BLAKE2b-256 d480446d7dfe2808d536de747322513fd249af0955658d0abf52562595be62e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcea019eb827ca500e8fd77bf214669eb46db1cc04f1a3e16702030ac75ead94
MD5 7bfc28c6f7820c34d08f4dcafa0b7422
BLAKE2b-256 ca2a360788f21c5d889834c10a31076009ac7890d812b5ce13834b04d853cc7b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 44645b0469821626816816bfbf8758fe7c13e4a4691b66e8cbbad8718431f0a7
MD5 527a3c7f2738bf246790a60f357a8e51
BLAKE2b-256 5c47c8d2d44f2e302aa31f656a397ddcf955ee8a41da0e9156819bc9b40d896d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.22-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.22-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.22-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be2469c877d2fe2d216c60bf0a8b56197fbb821145f9f86cfa3266f939b66077
MD5 402f281311e838689771930359b56ee4
BLAKE2b-256 689181c19e2b7f9a454d4ad5c98159bbc1990111e86e9f1718f3ea46de8c240b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40180228da3b63db7c379e793b25d4a940a1f4e89ae817880d31168af127675b
MD5 8b7032c54b324896f3a51de71d2f2e7c
BLAKE2b-256 500abc3a6b610f4cb9703d6ff59e4ecf545d68c80ccce9c99cf5d17925da6daa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.22-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 65091dc8252504d5b47fded6521a0b4b223248178ae151c7992a84e8512e62c9
MD5 f2881dd5d97709a03bc8642b60d7dae9
BLAKE2b-256 d3f459bb7386d0a7a5cb9d1ea5a7ecbc0e7426347f45b1a22bd46f376912b9fa

See more details on using hashes here.

Provenance

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