Learning Platform
Глоссарий Troubleshooting
Урок 20.03 · 22 мин
Начальный
FusionRustPerformanceNext-genBeta

В мае 2025 года dbt Labs анонсировали и выпустили в public beta dbt Fusion engine — переписанную с нуля на Rust замену для классического dbt-core (Python). На Coalesce 2025 (октябрь) Fusion получил статус GA (general availability) и теперь стабильно работает в продакшене ряда крупных компаний.

К маю 2026, моменту этого курса, Fusion — это production-ready alternative dbt-core, но всё ещё не дефолт. Junior должен знать, что Fusion существует, понимать, зачем он нужен, и продолжать учиться на dbt-core 1.10, потому что:

  1. Большинство компаний на dbt-core (миграция идёт постепенно)
  2. Fusion compatibility ещё не 100% — некоторые edge cases
  3. Документация и обучение в массе на dbt-core

Зачем нужен был Fusion

dbt-core написан на Python. У Python в задаче парсинга и компиляции есть фундаментальные ограничения:

  1. Старт медленный. Cold start dbt-core занимает 3-5 секунд (импорты, conftest, etc.). Для CLI-команды это много.

  2. Парсинг 1000 моделей — 30 секунд. На больших проектах (500-2000 моделей) parsing занимает значительное время, особенно если изменился dbt_project.yml или packages.

  3. Jinja parser однопоточный. dbt parsит модели в одном Python-потоке, GIL мешает реальному распараллеливанию.

  4. Нет настоящего SQL-понимания. dbt-core знает Jinja, но не понимает SQL — он передаёт SQL warehouse как чёрный ящик. Поэтому статический анализ типов колонок, проверка ref-валидности и т.д. ограничены.

Fusion решает все четыре:

dbt-core vs Fusion

Fusion — это движок, который под капотом делает то же самое, но быстрее и с большим static analysis. Для пользователя API похож, но не идентичен.

dbt-corePython, медленный старт, Jinja-only parsing
dbt FusionRust, мгновенный старт, SQL-aware compile, 30x parsing

Что измеримо быстрее в Fusion

dbt Labs опубликовали бенчмарки на репрезентативном проекте (~500 моделей):

Операцияdbt-core 1.10FusionSpeedup
Cold start (CLI ready)3.5s0.1s35x
Full parse (500 моделей)18s0.6s30x
dbt list (без выполнения)22s1.1s20x
dbt compile (500 моделей)28s4.5s6x
dbt build (50 моделей в DAG)90s75s1.2x

Заметь: runtime ускорение мизерное (dbt build 1.2x). Это потому что время dbt build — это в основном время в warehouse (выполнение SQL). Fusion не ускоряет Snowflake/BigQuery — они работают как работали.

Где Fusion реально сияет — это dbt list, dbt compile, dbt parse. То есть workflow:

  • Разработчик в IDE: каждое нажатие save — Fusion перепарсивает мгновенно, LSP-сервер мгновенный.
  • CI smoke check: dbt list --select state:modified+ — раньше 30 секунд, теперь 1.5. PR check почти мгновенный.
  • Cold-start CLI: dbt --help — раньше 4 секунды, теперь моментально. Удобство.

SQL-aware compile

Это главное архитектурное преимущество Fusion. dbt-core не понимает SQL — он просто разворачивает Jinja и шлёт в warehouse. Если ты в SELECT перечислил несуществующую колонку, dbt-core это узнает только на этапе dbt run (когда warehouse скажет «column does not exist»).

Fusion включает встроенный SQL parser (через DataFusion / sqlparser-rs). Он понимает SQL семантически и может на этапе compile:

  1. Проверять валидность ref-колонок. Ты пишешь {{ ref('stg_orders') }}.customer_id — Fusion знает, что stg_orders имеет колонку customer_id (из schema из catalog), и подсветит ошибку, если её нет.

  2. Lineage на уровне колонок (column-level lineage). dbt-core знает, что customers зависит от stg_customers. Fusion знает: «колонка customers.email берётся из stg_customers.email через SELECT». Это огромно для impact analysis: «если я поменяю формат email в stg_customers, какие downstream-колонки сломаются?» — Fusion отвечает точно.

  3. Type checking. WHERE created_at = 'хорошее утро' — Fusion заметит, что created_at это TIMESTAMP, литерал — TEXT, и выдаст warning до запуска.

  4. Dead code detection. Если ты добавил колонку в SELECT, но никто её не использует downstream — Fusion может подсветить.

Это превращает dbt в настоящий SQL-aware compiler, а не просто Jinja-разворачиватель.


Что меняется в developer experience

С Fusion типичный workflow аналитика становится:

  1. Save файла -> мгновенный feedback через LSP. Все ошибки подсвечены сразу: missing ref, missing column, type mismatch.

  2. dbt compile за 4 секунды вместо 28. Можно компилировать на каждый save без боли.

  3. Column-level lineage в Explorer. Можешь кликнуть на колонку и увидеть, откуда она пришла и где используется.

  4. IDE-плагины (VS Code, Cursor, Zed) с настоящим LSP — go to definition для ref(), hover info, refactor across project.

  5. CI быстрее. PR checks за минуты, не за десятки минут.

Это особенно ценно на больших проектах (1000+ моделей). На junior-проекте на 20 моделей разница менее заметна.


Что НЕ ускоряет Fusion

  • Warehouse SQL execution. Snowflake / BigQuery / DuckDB обрабатывают запросы как раньше.
  • Сетевые задержки до warehouse.
  • Тесты — это всё ещё SELECT-запросы в warehouse.
  • Snapshots — тоже warehouse-bound.

Поэтому полный dbt build ускоряется только на 10-20%. Если у тебя проблема «прод-билд занимает 3 часа», Fusion это не решит — проблема в warehouse.


Compatibility

Fusion декларирует совместимость с dbt-core по public API. То есть:

  • Те же команды (dbt run, dbt build, dbt test)
  • Тот же синтаксис Jinja
  • Те же селекторы
  • Те же артефакты (manifest.json, run_results.json)
  • Те же dbt_project.yml и profiles.yml

В большинстве случаев dbt-core проект работает в Fusion без изменений. Но есть edge cases:

  1. Custom Python макросы (run_query с Python-кодом) — Fusion интерпретирует Jinja через Rust, не Python. Некоторые экзотические макросы могут работать иначе.

  2. dbt_utils / dbt_expectations — основные пакеты адаптированы, но менее популярные пакеты могут не работать с Fusion.

  3. Pre/Post-hooks с Python — Fusion подерживает SQL-hooks, Python-логика в pre-hook ограничена.

  4. Адаптеры. Fusion supports main warehouses: Snowflake, BigQuery, Databricks, Redshift, Postgres. DuckDB поддерживается через dbt-duckdb (с oct 2025). Для редких warehouses может пока не работать.

  5. Тонкие отличия в SQL generation — Fusion может генерировать слегка иной SQL (другие имена CTE, разный порядок CREATE INDEX и т.д.). В 99% случаев результат идентичный, но bit-perfect совпадения нет.

dbt Labs выпустила инструмент dbt-autofix — он анализирует проект на dbt-core и сообщает, что нужно поправить для миграции на Fusion.


Как попробовать

Установка:

# Через pip (dbt-fusion)
pip install dbt-fusion

# Или через standalone binary
curl -fsSL https://fusion.getdbt.com/install.sh | sh

Использование — те же команды, но через dbtf (или dbt если ставил pip-вариант):

$ dbtf --version
dbt fusion 1.0.5

$ dbtf debug
14:23:15  Running with dbt fusion 1.0.5
14:23:15  Configuration: [OK]
14:23:15  Connection test: [OK]

$ dbtf parse
0.6s
Parsed 200 models, 50 tests, 8 sources

$ dbtf build --select +customers
... выполнение как обычно ...

Все артефакты в target/ совместимы с core — можно переключаться обратно если что-то не работает.

В dbt Cloud — checkbox в environment settings: «Use Fusion engine». Cloud сам обновит окружение.


Когда переходить на Fusion (для junior)

Сейчас (2026): нет необходимости.

Junior должен учиться на dbt-core 1.10 потому что:

  1. Подавляющее большинство компаний на dbt-core. Когда устроишься, скорее всего получишь core, не Fusion.
  2. Документация в основном про core. Туториалы, StackOverflow, курсы.
  3. Performance не критичен на маленьких проектах (до 100 моделей разница в секундах не заметна).
  4. Edge cases. Fusion стабилен, но всё ещё иногда удивляет.

Когда переходить: когда твоя компания мигрирует, или когда ты работаешь на проекте 500+ моделей с медленным CI.

Знать про Fusion на собеседовании — обязательно. На вопрос «слышал про Fusion?» правильный ответ: «Да, это Rust-based замена dbt-core, GA на Coalesce 2025, 30x parsing, SQL-aware compile с column-level lineage. Junior-проекты пока на core, миграция через dbt-autofix постепенно».


dbt Mesh — отдельная концепция

Часто Fusion упоминается в связке с dbt Mesh — это архитектурный паттерн для очень больших организаций, где разные команды работают на разных под-проектах и они связываются через cross-project ref. Mesh — это не Fusion, это про группы, публичные/приватные модели, контракты.

К маю 2026 Mesh — это middle/senior тема. Junior на это пока не смотрит. Главное — знать, что термин существует и что это не то же самое, что Fusion.


Попробуй сам

  1. Установи Fusion в отдельный venv: pip install dbt-fusion.
  2. Открой Jaffle Shop проект, запусти dbtf debug && dbtf parse (если адаптер DuckDB поддерживается). Сравни тайминги с обычным dbt.
  3. Запусти dbtf build --select customers — проверь, что результат в DuckDB идентичен core-варианту.
  4. Прочитай release notes Fusion 1.0 на docs.getdbt.com.

Чек-лист

  • Fusion = Rust-based замена dbt-core от dbt Labs. Public beta 28 мая 2025, GA Coalesce октябрь 2025.
  • 30x parsing, 6x compile, runtime не ускоряет (warehouse-bound).
  • SQL-aware compile — column-level lineage, type checking, dead code detection.
  • Public API compatibility — те же команды, артефакты, конфиги.
  • Edge cases: Python pre-hooks, экзотические пакеты, тонкие SQL-различия.
  • dbt-autofix — инструмент для миграции с core на Fusion.
  • Junior pragma: учиться на core, знать про Fusion на собеседовании.
  • dbt Mesh — отдельный архитектурный паттерн, не Fusion. Middle/senior тема.
dbt Mesh: архитектура multi-project
Проверка знанийKnowledge check
У тебя проект 800 моделей, CI занимает 12 минут на каждый PR. Команда обсуждает переход на Fusion. Какие ожидаемые выгоды, какие риски и что попробовать сначала?
ОтветAnswer
Ожидаемые выгоды: parsing 30x быстрее (например, если parse был 20s, станет 0.7s), compile 6x быстрее. На 800 моделей это значит: dbt list для CI ускоряется с 30s до 1.5s, dbt compile с 45s до 7s. Если в твоём 12-минутном CI 2-3 минуты — это парсинг и compile (типично для slim CI с state:modified+), Fusion сократит CI до 9-10 минут. Если основное время — выполнение SQL в warehouse (8-9 минут), Fusion поможет мало. Также: developer experience — LSP в IDE станет работать, instant feedback на save, column-level lineage в Explorer. Риски: 1) Edge cases — какие-то модели могут падать в Fusion из-за тонких SQL-различий. 2) Если используете dbt_utils + редкие пакеты — нужно проверить compatibility. 3) Python pre-hooks (если есть) — могут требовать переделки. 4) Адаптер warehouse — большинство main поддерживаются, edge-кейсы (например, Trino) могут отставать. План: 1) Сначала запустить dbt-autofix — он скажет, какие изменения нужны. 2) Создать ветку, переключить локально на Fusion, прогнать dbt build — увидеть, что работает. 3) В CI запустить параллельно core и Fusion на одном PR — сравнить артефакты. 4) Постепенно мигрировать: сначала dev/staging, потом prod. 5) Откатываться можно — артефакты совместимы.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 6. Что такое dbt Fusion engine и почему dbt Labs его сделали?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4