ELT против ETL: почему трансформации в хранилище
Почему порядок букв в аббревиатуре поменялся и что это значит для dbt.
ELT (Extract, Load, Transform) — подход, при котором сырые данные сперва загружают в хранилище как есть, а трансформируют уже внутри него средствами SQL. dbt отвечает за букву T.
Старый мир: ETL
Классический ETL — Extract, Transform, Load. Данные извлекали из источника, трансформировали на отдельном сервере (часто специальным ETL-инструментом вроде Informatica или самописным скриптом), и только готовый, очищенный результат грузили в хранилище. Причина была проста: хранилища стоили дорого, считали медленно, и держать в них сырьё было расточительно. Трансформацию выносили наружу.
У ETL есть минусы. Логика трансформаций спрятана внутри проприетарного инструмента, её трудно версионировать и тестировать. Сырые данные теряются — если завтра понадобится поле, которое выкинули при трансформации, его уже нет, нужно перезагружать. Масштабирование упирается в мощность ETL-сервера.
Новый мир: ELT
Облачные хранилища (Snowflake, BigQuery, Redshift) изменили экономику. Хранение стало дешёвым, вычисления — эластичными и быстрыми. Стало выгоднее грузить сырьё как есть, а трансформировать уже внутри хранилища его же мощностями. Порядок букв сменился: Extract, Load, Transform.
ETL (старый порядок):
Источник --[E]--> ETL-сервер --[T]--> Хранилище (только готовое)
ELT (новый порядок):
Источник --[E]--> Хранилище (сырьё) --[L загружено]
|
+--[T внутри хранилища, это dbt]--> Витрины
Где здесь dbt
dbt — это инструмент исключительно для буквы T в ELT. Он не извлекает данные (E) и не загружает их (L) — для этого есть Fivetran, Airbyte, Stitch или собственные пайплайны. dbt подключается к уже загруженному в хранилище сырью и силами SQL превращает его в чистые витрины. Это разделение труда — ключ к пониманию места dbt в стеке.
| Этап | Кто отвечает |
| E — Extract (извлечь) | Fivetran, Airbyte, кастомные коннекторы |
| L — Load (загрузить в хранилище) | Те же инструменты загрузки |
| T — Transform (трансформировать) | dbt |
Как работает под капотом
Поскольку трансформация идёт внутри хранилища, dbt не качает данные к себе и не считает их сам. Он лишь генерирует SQL и отправляет его хранилищу на исполнение. Вся тяжёлая работа — соединения, агрегации, оконные функции — выполняется движком Snowflake/BigQuery/Postgres. dbt — это «дирижёр», а не «вычислитель». Поэтому dbt такой лёгкий: ему не нужны большие ресурсы, вся мощь — у хранилища.
Частые ошибки
- Считать dbt заменой Airflow или Fivetran. Это разные слои: загрузка, оркестрация и трансформация. dbt — только трансформация.
- Тащить ETL-привычки в ELT. В ELT не надо бояться грузить сырьё «как есть» — место дешёвое, а сырьё пригодится.
- Думать, что ELT всегда лучше. Для очень больших объёмов и сложной потоковой обработки специализированные движки могут выигрывать.
Итоги
- ETL трансформирует до загрузки на отдельном сервере; ELT — после загрузки, внутри хранилища.
- Дешёвое хранение и быстрые облачные хранилища сделали ELT выгодным.
- dbt отвечает только за T: он генерирует SQL, а считает хранилище.