# ETL и ELT

## Определения и назначение

- **ETL (Extract–Transform–Load)** — подход, при котором данные:
  1. **Извлекаются** из источников (операционные базы, файлы, внешние сервисы).
  2. **Преобразуются** во внешнем по отношению к хранилищу вычислительном контуре (чистятся, приводятся к общей схеме, агрегируются).
  3. **Загружаются** в целевое аналитическое хранилище уже в подготовленном виде.
- **ELT (Extract–Load–Transform)** — подход, при котором данные:
  1. **Извлекаются** из источников.
  2. **Загружаются** в целевое хранилище или аналитическую платформу в максимально «сыром» виде.
  3. **Преобразуются** уже внутри этого хранилища, используя его вычислительные возможности.

И ETL, и ELT решают одну задачу: перенести данные из разнообразных источников в аналитическое окружение, где по ним можно строить отчёты, витрины, модели и алгоритмы.

## Особенности ETL

- **Где выполняются преобразования**:
  - Основная часть бизнес‑логики и очистки выполняется до загрузки данных в хранилище.
  - Часто для этого используется выделенный вычислительный контур (серверы или платформы, выполняющие ETL‑процессы).
- **Плюсы**:
  - На вход в хранилище попадают уже структурированные и проверенные данные.
  - Жёсткий контроль качества и схемы на этапе загрузки: данные, не удовлетворяющие требованиям, можно отфильтровать ещё до попадания в хранилище.
- **Минусы**:
  - Меньшая гибкость для исследовательских и ad‑hoc запросов: если какой‑то атрибут не был заложен в ETL‑процесс, его сложно использовать задним числом.
  - Усложнение и удорожание инфраструктуры: нужно поддерживать отдельный контур, в котором выполняются тяжёлые преобразования.

## Особенности ELT и мотивация его появления

- **Где выполняются преобразования**:
  - Сырые данные быстро загружаются в целевое хранилище или аналитическую платформу.
  - Основная часть трансформаций выполняется уже там: определяются представления, создаются витрины, вычисляются агрегаты.
- **Плюсы**:
  - Можно хранить сырые слои (raw) и на их основе строить несколько независимых витрин (marts) под разные команды и сценарии.
  - Легче поддерживать эволюцию схемы: новые атрибуты можно добавлять в витрины, не меняя уже загруженный сырой слой.
  - Быстрее «довозить» данные до потребителей: сначала данные попадают в хранилище, а детали трансформаций можно дорабатывать постепенно.
- **Минусы**:
  - На стороне хранилища возрастают требования к вычислительным ресурсам.
  - Необходима дисциплина в управлении слоями данных (сырые, очищенные, витринные), чтобы не превратить хранилище в «болото».
- **Почему появился ELT, если уже был ETL**:
  - Аналитические платформы стали достаточно мощными и масштабируемыми, чтобы выполнять тяжёлые трансформации прямо внутри себя.
  - Бизнесу потребовалась возможность быстрее начинать использовать данные, не тратя много времени на предварительное проектирование жёсткой схемы.
  - Появилась необходимость поддерживать множество разных витрин и экспериментальных моделей поверх одного и того же сырого слоя данных.

Для иллюстрации мотивов создания ELT возьмем следующий пример:

1. Вы построили какой-то ETL-конвейер, который собирает, трансформирует и передает в DWH некие данные о продажах.
2. На момент постановки задачи для аналитики хватало 30% атрибутов, которые вообще есть в исходных данных, по этому в ходе трансформации
   конвейер превалирующую часть данных источника просто удаляет и в DWH отправляются и хранятся те и только те данные, которые нужны для аналитики.
3. Спустя какое-то количество месяцев бизнес понимает, что надо включить в аналитику остальные 70% данных и в этот момент возникает боль:
   1. Нужно реструктурировать жесткую схему в DWH;
   2. Нужно переписать алгоритм трансформации;
   3. Нужно выполнить повторную загрузку всех ранее загруженных данных из источника:
      1. Это требует большого количества времени и вычислительных ресурсов;
      2. Данных в источнике может уже не быть 🥲.

ELT решает эту проблему тем, что сырые данные хранятся в Datalake в их первозданном виде и в результате
в описанном сценарии пункт 3.3. уже не представляет такой проблемы:

1. Нет накладных расходов на повторную транспортировку сырых данных от источника к трансформеру;
2. Если в источнике устаревшие и неактуальные данные были удалены, то в Datalake осталась их копия.

## Сравнение ETL и ELT

В упрощённом виде различия можно описать так:

- **Место вычислений**:
  - ETL — основная логика до хранилища.
  - ELT — основная логика в самом хранилище.
- **Скорость вывода данных в использование**:
  - ETL — дольше до первых результатов, потому что сначала нужно спроектировать и реализовать полный процесс.
  - ELT — быстрее можно начать работать хотя бы с сырыми данными.
- **Гибкость и эволюция схемы**:
  - ETL — изменения часто требуют переработки конвейера и повторной загрузки.
  - ELT — проще добавлять новые представления и витрины, переиспользуя сырые данные.
- **Требования к инфраструктуре**:
  - ETL — нагрузка распределена: часть тяжёлых вычислений выполняется вне хранилища.
  - ELT — высокий акцент на мощности и масштабируемости самого хранилища.

