Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 10 мин
Продвинутый
КурсRoadmapModule overview

Навигация и порядок прохождения

Курс — линейный по умолчанию, но senior-аудитория часто приходит с конкретной целью (написать adapter, оптимизировать большой проект, понять Fusion). Поэтому я разделил материал на блоки, между которыми есть жёсткие зависимости (нельзя браться за adapter API, не разобрав Manifest), и блоки, которые относительно независимы (Mesh можно проходить до или после Fusion).


Карта зависимостей

Зависимости модулей dbt III
00 — ВведениеТекущий блок: про курс, навигация, прогресс.
Foundation block (жёстко последовательный)
01 — Architecturepipeline CLI -> RuntimeConfig -> ManifestLoader -> Linker -> GraphRunnableTask -> Runners -> BaseAdapter. Critical hubs: Manifest и GraphRunnableTask.
02 — Parsingtree-sitter static parser, ManifestLoader, partial_parse.msgpack, dbt parse command, performance issues.
03 — Jinja contextsparse vs execute phase, ProviderContext / MacroContext / BaseContext, ref/source/var/env_var, statement, config API.
Artifacts (опционально, но желательно)
04 — Manifestmanifest.json full structure: nodes, sources, macros, exposures, metrics, parent_map/child_map, schema versions.
05 — Run resultsrun_results.json schema v6, catalog.json, sources.json, semantic_manifest.json, observability patterns.
Application block (параллельно можно)
06 — ProgrammaticdbtRunner API, dbt.invoke, dbtRunnerResult, thread-safety, Dagster integration.
07 — Materializations6-фазный lifecycle, run_hooks, statement, dispatch, precedence, custom example (audit_log).
Adapter (требует 04 Manifest + 07 Materializations)
08 — Adapter ISQL vs Base adapter, cookiecutter, Credentials, ConnectionManager, dbt debug.
09 — Adapter IIRelation, Column, required macros, AdapterCapability/BehaviorFlag, dbt-tests-adapter, packaging.
Scale (требует 01-05)
10 — PerformancePartial parse tuning, threads, defer, microbatch parallel, Iceberg, Fusion migration trigger.
11 — dbt MeshCross-project ref, project_dependencies, public/private/protected, versions, dbt-meshify.
Future stack (independent)
12 — FusionRust implementation, SDF Labs acquisition, public beta, что ускоряет, Language Server, миграция через dbt-autofix.
13 — MetricFlowMetricFlow internals, DataflowPlan, v2 YAML 1.12, GraphQL/JDBC, dbt MCP server.
Capstone — выбор
14 — CapstoneТри варианта: A) контрибьют в dbt-core; B) написать adapter; C) large-project optimization case.

*** — модули с уникальной глубиной**. Модули 01, 02, 03 — фундамент, без которого остальное не уложится. Модуль 10 — практическая ценность для всех, кто ведёт большой проект.


Три типа траекторий

В зависимости от цели приходящие senior выбирают одну из трёх траекторий.

A. «Я хочу написать собственный adapter»

Целевые модули: 01-09. Полный foundation block (01-03), артефакты (04-05), application (06-07), и оба adapter-модуля (08-09). Capstone — вариант B (написать adapter from scratch).

Можно пропустить: 10 (performance), 11 (Mesh), 12 (Fusion), 13 (MetricFlow) — вернуться к ним отдельно.

Часы: ~50.

B. «Я хочу оптимизировать огромный dbt-проект»

Целевые модули: 01-05, 10, 11. Foundation block обязателен — без понимания parsing и Manifest нельзя осознанно настраивать partial parse tuning и defer. После — модули 10 и 11.

Можно пропустить: 06 (programmatic), 07 (materializations), 08-09 (adapters), 12 (Fusion может стать решением, но в режиме скана), 13 (MetricFlow).

Часы: ~40.

C. «Я хочу контрибьютить в dbt-core»

Целевые модули: 01-13 — полный курс. Контрибьюции в dbt-core часто требуют понимания parsing, контекстов, artifacts, adapters, и текущего направления (Fusion). Capstone — вариант A (good_first_issue PR в dbt-core).

Часы: ~75-80.

TIP

Если приходите с целью «понять Fusion и решить переезжать ли» — пройдите 01-03 (чтобы понять что ускоряется), потом сразу 12. Это короткий путь к ответу.


Формат уроков и материалов

Каждый модуль состоит из 4-5 уроков единого формата:

  • MDX-урок — теория с диаграммами, Python-сниппетами из dbt-core, реальными manifest.json фрагментами, callout-блоками. 22-30 минут чтения.

  • Quiz после урока — 5-7 вопросов (multiple-choice + true/false) уровня applied / analytical (conceptual — только для теоретических основ).

  • Module exam — 6 deep вопросов в конце ключевых модулей (01, 03, 07, 09). Passing threshold 70%.

  • Labs — 4 lab-проекта на ключевые навыки:

    • LAB-01 — custom materialization audit_log
    • LAB-02 — adapter dbt-pglite from scratch
    • LAB-03 — programmatic dbtRunner в Dagster orchestrator
    • LAB-04 — large-project optimization case с замерами
  • Glossary и Troubleshooting — справочники senior-терминов и senior-уровня gotchas (cyclic ephemeral, defer trap, partial parse invalidation, contract drift и т.д.).

TIP

Лабы — главное в этом курсе. Lab «adapter from scratch» (4-8 часов) даёт навык, который читать на лекциях бесполезно. Если делать только labs (без MDX), курс работает на 60%. Если только MDX (без labs) — на 30%.


Стиль уроков

Senior-уроки отличаются от middle/junior:

  • Источники — Python код dbt-core. Каждый ключевой класс мы открываем как файл (core/dbt/contracts/graph/manifest.py), смотрим определение, обсуждаем дизайн-решения.
  • Никаких happy paths. Всё под микроскопом edge cases: partial parse инвалидация по env var, defer trap при ref на prod, contract violation на nullable column delete.
  • Сравнения версий. Где между 1.10 и 1.11 что-то изменилось — отмечаем. Где master уже расходится с 1.11 — упоминаем.
  • Performance figures. Где есть реальные цифры (Fusion 30x parsing speedup) — приводим. Где нет — говорим «approximately» и не врём.

Что делать, если застрял

Любой senior-курс должен признавать: иногда читатель остаётся с вопросом без ответа. Стратегии:

  1. Открыть исходники. Не «прочитать в документации», а git grep -n "ProviderContext" core/dbt/. Половина senior-знаний находится через grep.
  2. Поднять breakpoint() в нужном месте dbt-core. Клонировать, pip install -e ., добавить import pdb; pdb.set_trace() в core/dbt/parser/manifest.py:200, запустить dbt parse на тестовом проекте.
  3. Спросить в Telegram-группе курса. Senior-вопросы — самые ценные для остальных читателей.
  4. GitHub Issues dbt-core. Когда есть подозрение на bug — issue в dbt-labs/dbt-core. Maintainers активны.

Связь с другими курсами

dbt III — финал серии. Что дальше:

  • dbt-adapters specific — если планируете глубоко работать с конкретным warehouse (Snowflake, Databricks), читайте source их адаптеров. Курс не покрывает adapter-specific feature flags.
  • MetricFlow specificdbt-labs/metricflow на GitHub. Курс даёт основу, для полноты — open issues этого репо.
  • dbt Fusion specific — материал быстро устаревает (GA Coalesce 2025). Курс даёт architecture, для актуального — docs.getdbt.com/docs/fusion.

Проверка знанийKnowledge check
Если ваша цель — написать собственный dbt adapter под нестандартный warehouse (например, в компании внутренняя column-store DB), какие модули обязательны к прохождению, какие можно пропустить?
ОтветAnswer
Обязательны: 01-03 (фундамент — без понимания pipeline, Manifest, Jinja контекстов писать adapter бесполезно), 04 (Manifest structure — Relations и Columns которые adapter возвращает попадают в Manifest), 05 (run_results — adapter возвращает AdapterResponse, который попадает в run_results.json), 07 (materializations — adapter взаимодействует с materializations через dispatch), 08-09 (собственно Adapter API). Можно пропустить (вернуться позже): 06 (programmatic invocation — adapter не зависит от того, как dbt запускается), 10 (performance at scale — оптимизация конкретного проекта, не adapter в общем), 11 (dbt Mesh — orthogonal к adapter), 12 (Fusion — отдельная история, Rust engine), 13 (MetricFlow — semantic layer работает поверх adapter, не требует от него специфики). Capstone — вариант B (написать adapter from scratch). Курс реально пройдёт за ~50 часов вместо 75-80 при полном.

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

Результат: 0 из 0
Прикладной
Вопрос 1 из 6. Какие модули курса автор отмечает как ключевые (звёздочкой) и почему?

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

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

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

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