Skip to main content

With dbt, data analysts and engineers can build analytics the way engineers build applications.

Project description

dbt Fusion Engine

dbt F✦SION engine (BETA)

This repo hosts components of the dbt Fusion engine, the foundation for future innovation in dbt. The dbt Fusion engine is written in Rust and is designed for speed, correctness, and has a native understanding of SQL across multiple data warehouse SQL dialects.

[!IMPORTANT]
Note: the dbt Fusion Engine is in Beta!

Bugs and missing functionality compared to dbt Core will be resolved continuously in the leadup to a final release (more info: the dbt Fusion Engine: the Path to GA).

The dbt Fusion engine is a ground up, first principles rewrite of the dbt Core execution engine, built to be interoperable with the standard dbt authoring layer. Fusion enforces some ambiguous areas of the authoring spec more strictly than dbt Core to ensure correctness (for example, dbt Core does not proactively validate most YAML configurations). Many of these discrepancies can be fixed automatically with the dbt Autofix tool.

Beyond conformance with dbt Core, Fusion also contains new SQL Comprehension capabilities, a language server, modern ADBC drivers for warehouse connections, and more. While dbt Core was written in Python, the dbt Fusion engine is written in Rust, and compiled to a single application binary.

You can install dbt-fusion onto your local machine, a docker container, or a machine in the cloud. It is designed for flexible installation, with no dependencies on other libraries. The only libraries that dbt Fusion will load are it's corresponding database drivers.

The dbt Fusion engine is being released to this repository incrementally, so, until this note is removed this repository contains only a subset of the crates that make the core of the engine work. These crates are published incrementally starting on May 28.

Getting Started with the dbt Fusion engine

[!TIP]
You don't have to build this project from source to use the new dbt! We recommend using the precompiled binary with additional capabilities:

There are several ways to get started with Fusion (for more, see the Quickstart for the dbt Fusion engine)

  1. Download dbt the vs-code extension - For most people the best experience. This will install the dbt fusion CLI and Language Server on your system - see the docs page: Install the dbt VS Code extension.
  2. Install Fusion Directly Install just the fusion CLI with the command below or see dbt's documentation: About Fusion installation
curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
  1. Build Fusion from Source - See the below section: Compiling from Source

Supported Operating Systems and CPU Microarchitectures

Fusion & associated drivers are compiled for each CPU microarchitecture and operating system independently. This allows for hardware level optimization.

Legend:

  • 🟢 - Supported today
  • 🟡 - Unsupported today
Operating System X86-64 ARM
MacOS 🟢 🟢
Linux 🟢 🟢
Windows 🟢 🟡

Timeline

Target Date Milestone Description
2025-05-28 Initial release of Fusion Published source code of parser, schemas, dbt-jinja, and Snowflake ADBC driver
2025-06-09 Databricks Adapter release Databricks ADBC driver, and adapter for Fusion
2025-06-30 BigQuery Adapter release BigQuery ADBC driver, and adapter for Fusion
2025-07-31 Redshift Adapter release Redshift ADBC driver, and adapter for Fusion
2025-09-30 OSS Adapters Adapter components published under Apache 2.0 license
TBD ANTLR Grammars SQL dialect grammars used by the ANTLR parser generator

Top Level Components Released to Date

Releases of various Fusion components will be iterative as each component reaches maturity & readiness for contribution.

  • dbt-jinja - All Rust extension of mini-jinja to support dbt's jinja functions & other capabilities
  • dbt-parser - Rust parser for dbt projects
  • dbt-schemas - Complete, correct, machine-generated jsonschemas for dbt's properties and configurations
  • dbt-adapter - adapters for supported data warehouses
    • snowflake
    • databricks
    • bigquery
    • redshift
  • dbt-xdbc - Rust wrapper for ADBC and ODBC drivers
  • dbt-auth - Auth for all supported warehouses and database systems
  • dbt-agate - Rust port of the Python agate library
  • dbt-sql - ANTLR grammars and generated parsers
    • bigquery.g4
    • databricks.g4
    • redshift.g4
    • snowflake.g4
  • Fusion: comprehensive release of the (source-available) dbt Fusion engine.

FAQ

Can I contribute to the dbt Fusion engine?

Yes absolutely!. Please see CONTRIBUTING.md for contribution guidelines

How is dbt Fusion different from dbt Core? The dbt Fusion engine is a ground-up rewrite of dbt Core, with many additional capabilities. *Things that are the same:* * The YML authoring format including profiles, configuration, seeds, data tests, and unit tests * The materialization libraries * dbt's library managemenet system (although `dbt deps` are installed automatically)

Additional capabilities provided by Fusion:

  • All new Arrow Database Connector (ADBC) drivers for faster data transfers and unified connection handling
  • A language server and corresponding VS-Code extension (compatible with Cursor) for ease of development
  • Multi-dialect SQL compilation, validation, & static analysis
  • Standalone distribution. No JVM, or python required.
  • Automatic installation of dependencies, whether that's a dbt package, or database driver
  • dbt code-signed & secure distributions
This repo doesn't have all of dbt's functionality, when will the rest come? dbt Fusion's source code is being published as components are finalized. Please see the above section: [Timeline](#timeline).
Can I use dbt Fusion today?
State Description Workaround Resolvable by
Unblocked You can adopt the dbt Fusion engine with no changes to your project --- ---
Soft blocked Your project contains functionality (for more info: How to get ready for the new dbt engine. Resolve deprecations with the dbt-autofix script or workflow in dbt Studio Users
Hard blocked Your project contains Python models or uses a not-yet-supported adapter Remove unsupported functionality if possible dbt Labs

Compiling from Source

The primary CLI in this repository is the dbt-sa-cli. To compile the CLI, you need the Rust toolchain.

Let's start with Rust, run the following command to install Rust on your machine:

Linux:

sudo ./scripts/setup_dev_env_linux.sh

Mac:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Great! We have Rust installed. To confirm, run the following command:

cargo -v

You should see a printout like:

Rust's package manager

Usage: cargo [+toolchain] [OPTIONS] [COMMAND]
       cargo [+toolchain] [OPTIONS] -Zscript <MANIFEST_RS> [ARGS]...

Options:
  -V, --version                  Print version info and exit
...

Cargo is Rust's build system and package manager. If you're familiar with Python, pip would be a sufficient comparison. We'll use cargo to run command to build the local dbt-sa-cli binary and run helper scripts via cargo xtask. More on that later.

To build the binary locally, cd to the this repo's directory and run:

cargo build

This will compile our Rust code into the dbt-sa-cli binary. After this completes, you should see a new executable in target/debug/dbt-sa-cli. You can run this executable by passing the path directly into the CLI, so if you're in the root of this git repo, you can run:

target/debug/dbt-sa-cli

If built correctly, you should see output like:

> ./target/debug/dbt
Usage: dbt <COMMAND>

Commands:
  parse    Parse models
  ...

You might be wondering why it was built into the debug directory - this is because our default profile is debug when running cargo build. Our debug profile compiles the code faster, but sacrifices optimizations to do so. Therefore, if you want to benchmark the parser, build with the flag cargo build --release. The compile will take longer, but the build will mimic the experience of the end user.

If you expect to use this executable often, we recommend creating an alias for it in your ~/.zshrc. To do so, start by getting the absolute path to the executable with:

cd target/debug && pwd

Running Tests

To run tests, increase the stack size and use nextest.

 RUST_MIN_STACK=8388608 cargo nextest run --no-fail-fast

License

The dbt Fusion engine is a monorepo and contains more than one License. Most code is licensed under ELv2. For more, please see LICENSES.md.

Acknowledgments

To the dbt community: dbt the tool & dbt Labs the company would not be here without the incredible community of authors, contributors, practitioners, and enthusiasts. dbt Fusion is an evolution of that work & stands on the shoulders of what has come before.

To the Arrow Community: dbt Labs is committing fully to the Arrow ecosystem. Fusion exclusively uses the Arrow type system from drivers through adapters into the internals of the compiler & runtime.

To the DataFusion Community: The intermediate representation of the SQL compiler is the DataFusion logical plan which has proven to be pragmatic, extensible, and easy to work with in all the right ways.

Thank you all. dbt, Arrow, and DataFusion have become truly global software projects. dbt Labs is committed to contributing meaningfully to these efforts over the coming months and years.

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.

dbt_core_experimental_parser-2.0.0.dev20-py3-none-win_amd64.whl (51.7 MB view details)

Uploaded Python 3Windows x86-64

dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_x86_64.whl (46.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_aarch64.whl (42.6 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_11_0_arm64.whl (41.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_10_12_x86_64.whl (46.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file dbt_core_experimental_parser-2.0.0.dev20-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dbt_core_experimental_parser-2.0.0.dev20-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4803324a5b53269420c4fcaebc35f3486a461ac101d6e88ba7d84e84e8c8f3a6
MD5 4d4b59e40fcab7261d584bb50c060152
BLAKE2b-256 f961994a42e8d5d262c1005b60293754b815769c9b92d497b29a00134c9bc1c6

See more details on using hashes here.

File details

Details for the file dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3a46c1b9605dd9046e7429b488b1e15af6b354804091a1d671f8dbcb72b28fe
MD5 8ae6d1bef479a1df15c28536110491f2
BLAKE2b-256 91ea30397d3b78544362b466e5496f2ef13e674081dcdadeea4c979ff662a1a4

See more details on using hashes here.

File details

Details for the file dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for dbt_core_experimental_parser-2.0.0.dev20-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 71973065b7cebb604a503d9360b4ca14f03294b72d93044ab3c09a5aac2ae539
MD5 260f897a0995f7f6fc40df662b0b98c5
BLAKE2b-256 5dc18849f046517fa0efd3c6fc2c9f3ab7025ed888eb3eda1208a40028fcc98a

See more details on using hashes here.

File details

Details for the file dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f241df97a544dd49a378f7cc8fd3d7f0dfcde3e1883540dedcb0caa53049896
MD5 4c52cd5d96f663d42f628dd3dcf173d1
BLAKE2b-256 f2c20ad58fc8281edcafe505cb7169189446e202c5be8c9c6bab2b5407c7a3ee

See more details on using hashes here.

File details

Details for the file dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for dbt_core_experimental_parser-2.0.0.dev20-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a298f5d69f0e4f4dd80ef87f9b7e53397bfbff3df70bba53520c9f687bb9ea91
MD5 1aad0362a680ca30e136067f98bb6696
BLAKE2b-256 2045af62a9fdc34717b378f6b74c2976582c12ce8cb981af2c507abadfb9f019

See more details on using hashes here.

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