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

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

dvt_core-0.2.21-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.21-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.4 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

dvt_core-0.2.21-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.21-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (15.8 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

dvt_core-0.2.21-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.21-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.21-cp310-cp310-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dvt_core-0.2.21-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.21-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.21-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 84102ccbb661f4533ab8f1b26bf6a197c87b3bb97ef673cdcb871ff2f4292e5c
MD5 7c2cf676b015135c0ce9863ae3cf3c7f
BLAKE2b-256 34d1a767119cfb0f4d6398c3de3a6a61f72b85da2ddaf3f03ddc574e1df03a38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ba81928445cb6bb5397f9f10a979bae47cbadc599b9c4d8717e7ceb7a5df9c7
MD5 9e2a4a61631bc12d3971957e1bb4c978
BLAKE2b-256 bcbeab714a34cdb65dde535e7f1e43242fea5f12057acfc7600fc4a65a1f1c28

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 77abd6cd4b0a98a285d0758c90c833d61612bb1a400be85f9deac5be691b5039
MD5 7989cb5a2aac0465c3ade498f74d965e
BLAKE2b-256 1cfa517f42fdad5056afc166b9c134ad09cef9e0ae9dc1a336e6bc04e908e6d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.21-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.21-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.21-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ec54c21eef29399c9cf2e1395675098efbb2141d56218e815bb26f1a7783ffb5
MD5 96c84c29e43de5e24ba3c25992ac1657
BLAKE2b-256 1daff2d283338342df49ebcdb70a8971a30260edfba1cab50f830c88047db1fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76c6d0f569c8c27501be87fd58c6e7f0d7616aec615dd257ccda7901e16a0cdf
MD5 5d48ac3374cc1b4a6ea0d9be6c613d2a
BLAKE2b-256 53672682a0a88f79f380d74bd36ca7095a30437af7240a8414e261c0be39e96d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0516d9796752340b700a00d00f76241c726fad0056d1494500447e3190a6bfbd
MD5 6193d382f08adedd4904308b20154148
BLAKE2b-256 7c8502cdad7f33579cd9abe0f2025dba54e3109922ace12850883fc96361e461

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.21-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.21-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.21-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 85cd220264b66421f43ea335b00271b766d91ef44cfc9458143064a1b01f5b1f
MD5 4b521b5c22ce8679201a7f1a3a087699
BLAKE2b-256 86eb52a4466c090c3f3b042f9be6a982fce75ee3bfff837951b806faea128b74

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8c201a187988dd3b9e9f749907fed571d3420c1104961e5ec283dffdf51ec54
MD5 976a67dc2486121ae42de693f6516ef9
BLAKE2b-256 a9492cd18ac9c45f13b7eb6bcd03d8eb6a6efd30cf8eaed52661f859287b993b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 39e0e2565f66e350b0878642bac0af5776cee9a3c862cf35b52acb89d5f17d47
MD5 0b18852e54c5ea50221c73c947d2e770
BLAKE2b-256 f5e49afb930dbabbac383029951439edfe4d0de41de8c7e7c2710f5ea8b00289

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.21-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.21-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.21-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ed9ff5edf25736ade92276b6dc7ec3c9c633e640d472d061d6b1c6ca0cf00584
MD5 aaad170e95848d52de05373968ffc67a
BLAKE2b-256 233e2959f883dadf23c118a28c84ad0ef56c9c97567c5b89902f513d8f24b2c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3757ee0dd6874dadcb48bb6f8a4fadfb067b613cf494b32060beb53443324ce7
MD5 3d42bbb01e80114760fa042438075602
BLAKE2b-256 299253ac0d62d1b6708f15a507dc674fb62bde71aa9eff20d88c2f604529f02a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1bf0f5c595e07cabf2ba3261d152eae800fb233b1637aa74352f25fdde30070c
MD5 d3ebe4d9d3fb0ee635ea4eb915d5ae26
BLAKE2b-256 6e7d6bd8552891053c150fb8cc4c185f1babfa88c05e4b8de1abf05c022172c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvt_core-0.2.21-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.21-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.21-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ccb040fd6cb12e89a760fed22d505ae43d34b7cb620db2ff68251efa9d8220f4
MD5 659f35cd7bd5f0196663f4d1db6065e9
BLAKE2b-256 a8441aa8a19185a936a8e8d027a76b83b04faa4ae3cff123d9b98295bba9ade3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc789c9697236b62dfdc80ba883df0edcdfb9225b4f7fc611487b1402da2aaac
MD5 e2d88b216f1c217618e8ab89d419d49e
BLAKE2b-256 feddddae256311601b819bc8f48988cc0ce149aaaf66095b9948567fcfdf13e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for dvt_core-0.2.21-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6cbeec65e827c6c986518aa54defc40f880d40be41643c362b274a406b54191c
MD5 416f507d4484df0efc8e9f4b75a37677
BLAKE2b-256 4eb16306f8a1ff76b444cc380861d7e87fff71e42e2588cfafc9cda7864dccb3

See more details on using hashes here.

Provenance

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