ETL vs ELT: что выбрать
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Короткий ответ
- ETL = Extract → Transform → Load. Трансформируем данные до загрузки в DWH.
- ELT = Extract → Load → Transform. Трансформируем после загрузки, уже в DWH.
- ELT — современный подход, работает с облачными DWH (Snowflake, BigQuery, Redshift).
- ETL — более старый, но всё ещё актуален для строгой регуляторики и on-premise.
Сравнительная таблица
| Критерий | ETL | ELT |
|---|---|---|
| Порядок шагов | Extract → Transform → Load | Extract → Load → Transform |
| Где трансформируется | В отдельном compute | В DWH |
| Современный подход | нет | да |
| Сложность pipeline | высокая | средняя |
| Стоимость compute | предсказуемая | зависит от DWH |
| Хранение raw data | нет | да (data lake) |
| Инструменты | Informatica, Talend, old Airflow | dbt, modern SQL |
Как работает ETL
Источник (Postgres, API, файлы)
↓ Extract (вытаскиваем)
Compute сервер (Airflow + Python)
↓ Transform (очищаем, агрегируем, джоиним)
DWH (загружаем уже готовое)Пример: Python-скрипт из Airflow забирает JSON, парсит, чистит, джоинит с CSV, складывает результат в DWH-таблицу.
Как работает ELT
Источник (Postgres, API, файлы)
↓ Extract
Data Lake или staging-таблицы в DWH
↓ Load (сырые данные)
DWH (Snowflake, BigQuery)
↓ Transform (SQL-модели, dbt)
Финальные таблицы для аналитикиПример: Fivetran-connector забирает сырые JSON из API в Snowflake. dbt запускает SQL-модели, которые очищают и агрегируют прямо в Snowflake.
Когда ETL
Плюсы ETL:
- Не засоряется DWH сырыми данными
- Контроль трансформаций до DWH (compliance)
- Предсказуемый compute (знаем сколько стоит)
- Подходит для on-premise без мощного DWH
Минусы ETL:
- Сложный pipeline (отдельный ETL-tool + код)
- Сырые данные теряются (сложно re-process)
- Легаси-технологии (Informatica, Talend)
- Медленная итерация (изменил логику → пересчитать весь pipeline)
Use cases:
- Регулируемые отрасли (банки, healthcare)
- On-premise инфраструктура
- Малый объём данных
Когда ELT
Плюсы ELT:
- Быстрая итерация (меняешь SQL → сразу результат)
- Сырые данные всегда доступны (can re-process)
- Простой stack (dbt + Snowflake / BigQuery)
- Аналитики могут править трансформации сами (SQL, а не Python)
- Масштабируется с ростом данных (DWH эластичный)
Минусы ELT:
- Зависимость от облачного DWH ($$$ на compute)
- Можно накосячить и затолкать PII в raw таблицы
- Нужна культура dbt / CI / тестирования
Use cases:
- Стартапы и scale-up (быстрая итерация)
- SaaS-продукты
- Всё на облаке (Snowflake, BigQuery, Redshift)
- Большие объёмы данных
Современный аналитик
В 2026 году вероятнее всего вы работаете с ELT. Типичный стек:
- Extract + Load: Fivetran, Airbyte (сам коннектор)
- Store: Snowflake / BigQuery / ClickHouse
- Transform: dbt (SQL-модели с тестами)
- Orchestration: Airflow (минимально, для расписания dbt run)
- BI: Metabase, Looker, Tableau
Аналитик пишет dbt-модели (SQL + jinja), не Python-ETL.
Пример: ETL на Python vs ELT на dbt
ETL на Python
import pandas as pd
from sqlalchemy import create_engine
# Extract
df = pd.read_sql("SELECT * FROM orders", source_db)
# Transform
df['revenue_rub'] = df['revenue_usd'] * 90
df_agg = df.groupby('category').agg(rev=('revenue_rub', 'sum'))
# Load
df_agg.to_sql('revenue_by_category', dwh_engine)ELT на dbt
-- models/revenue_by_category.sql
SELECT
category,
SUM(revenue_usd * 90) AS revenue_rub
FROM {{ ref('stg_orders') }}
GROUP BY categorydbt автоматически создаст таблицу revenue_by_category в DWH.
Проблемы ELT
Несмотря на тренд, у ELT есть слабости:
Cost explosion
Если забыть ограничить compute на DWH — счета улетают в тысячи долларов. Решение: dbt incremental models, partitioning, good warehouse sizing.
Data swamp
«Загрузим всё сырое, разберёмся потом» → через 2 года сотни таблиц, никто не знает что актуально. Решение: data catalog, naming conventions.
PII в raw слоях
Raw-данные могут содержать персональные данные. Нужны процессы masking / row-level security.
Частые ошибки
Ошибка 1. Выбирать по моде, а не по задаче
ELT крут, но если у вас 10 GB данных на on-premise Postgres — ETL на Python проще и дешевле.
Ошибка 2. ETL без версионирования
Старые ETL-tools не всегда дружат с git. Если логика в GUI — нет ревью, нет rollback.
Ошибка 3. ELT без тестов
dbt позволяет писать тесты данных. Не ленитесь — они ловят проблемы раньше, чем stakeholders.
Ошибка 4. ETL/ELT = весь data engineering
Это только часть. Нужны orchestration, monitoring, alerting, catalog, lineage.
Связанные темы
FAQ
ETL или ELT в 2026?
ELT, если у вас облачный DWH. ETL всё ещё живёт в enterprise / on-premise.
Можно ли смешивать?
Да: reverse-ETL берёт из DWH и пишет в SaaS (операционные системы). EtLT (extract-tiny-transform-load-transform) — лёгкая очистка на extract.
dbt это ELT или ETL?
ELT. dbt трансформирует в DWH с помощью SQL.
Что учить аналитику?
В первую очередь — dbt + SQL для ELT. ETL-концепции на уровне понимания.
Тренируйте data engineering — откройте тренажёр с 1500+ вопросами для собесов.