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, а считает хранилище.
Проверьте себя
1. Что означает, что dbt — это «буква T в ELT»?
Adbt загружает данные в хранилище
Bdbt извлекает данные из источников
Cdbt отвечает за трансформацию данных, уже загруженных в хранилище
Ddbt заменяет хранилище
2. Почему стал выгоден переход от ETL к ELT?
AОблачные хранилища сделали хранение дешёвым, а вычисления быстрыми и эластичными
BSQL стал проще
CИсточники данных исчезли
DETL-серверы перестали существовать
3. Где физически выполняется SQL, который генерирует dbt?
AНа сервере, где запущен dbt
BВнутри хранилища данных (Snowflake, BigQuery, Postgres)
CВ браузере аналитика
DВ оперативной памяти Airflow