Prog Academy
RU UA
Данные и аналитика

Что такое ETL?

ETL (Extract, Transform, Load) — процесс переноса данных из источников в хранилище: сначала данные извлекают из систем, затем приводят к единому виду и очищают, и только потом загружают туда, где с ними будут работать аналитики.

Необходимость возникает всегда, когда данные живут в разных местах. CRM называет клиента одним полем, бухгалтерия — другим, рекламный кабинет отдаёт даты в своём формате. Без этапа преобразования свести это в один отчёт невозможно.

Вариант ELT меняет порядок: данные сначала грузят в хранилище как есть, а преобразуют уже внутри него силами самой базы. Так делают в облачных хранилищах, где вычислительной мощности достаточно, а гибкость важнее.

Где применяется

ETL-процессы запускают по расписанию, чаще всего ночью, чтобы к утру отчёты показывали свежие цифры. Данные забирают из CRM, учётной системы, рекламных кабинетов и логов сайта, приводят к общим справочникам и складывают в хранилище, откуда их читают BI-инструменты.

Отвечает за это инженер данных, в небольших командах — аналитик. Пишут такие процессы на Python или SQL, а оркестрируют Airflow, dbt или встроенными средствами облака. Значительная часть работы — не перенос, а обработка сбоев: что делать, если источник не ответил или прислал данные в изменившемся формате.

Пример

Отчёт по рекламе собирает данные из трёх кабинетов. В одном дата приходит строкой, в другом валюта в долларах, в третьем название кампании написано с лишними пробелами. Этап преобразования приводит всё к одному виду — только после этого цифры можно складывать.

raw = pd.read_csv('exports/orders.csv')          # Extract

clean = (raw
    .rename(columns={'order_date': 'created_at'})  # Transform
    .assign(created_at=lambda d: pd.to_datetime(d.created_at))
    .query("status == 'paid'")
    .drop_duplicates(subset='order_id'))

clean.to_sql('fact_orders', warehouse, if_exists='append')  # Load
Три шага ETL на Python: извлечь из источника, привести к единому виду, загрузить в хранилище.

Частые вопросы

Чем ELT отличается от ETL?

Порядком шагов. В ETL данные преобразуют по дороге и кладут в хранилище уже готовыми. В ELT их сначала загружают как есть, а преобразуют внутри хранилища его же мощностями. Облачные платформы сделали второй подход дешёвым, поэтому он встречается всё чаще.

Нужен ли ETL небольшой компании?

Формальный процесс с оркестратором — вряд ли. Но как только отчёт собирается из двух и более источников вручную каждую неделю, эту работу стоит записать кодом. Даже простой скрипт по расписанию экономит часы и убирает ошибки ручного копирования.

На чём пишут ETL-процессы?

Чаще всего на Python с pandas или на чистом SQL, если преобразования происходят внутри базы. Для расписания и зависимостей между шагами берут Airflow, для преобразований в хранилище — dbt. Существуют и готовые сервисы без кода вроде Fivetran.

Что делать, если источник изменил формат данных?

Именно поэтому в ETL закладывают проверки: сверку количества строк, контроль типов и обязательных полей, уведомление при отклонении. Процесс лучше остановить с понятной ошибкой, чем молча загрузить испорченные данные — иначе отчёт покажет неверные цифры.

Связанные термины