Что такое 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 Частые вопросы
Чем ELT отличается от ETL?
Порядком шагов. В ETL данные преобразуют по дороге и кладут в хранилище уже готовыми. В ELT их сначала загружают как есть, а преобразуют внутри хранилища его же мощностями. Облачные платформы сделали второй подход дешёвым, поэтому он встречается всё чаще.
Нужен ли ETL небольшой компании?
Формальный процесс с оркестратором — вряд ли. Но как только отчёт собирается из двух и более источников вручную каждую неделю, эту работу стоит записать кодом. Даже простой скрипт по расписанию экономит часы и убирает ошибки ручного копирования.
На чём пишут ETL-процессы?
Чаще всего на Python с pandas или на чистом SQL, если преобразования происходят внутри базы. Для расписания и зависимостей между шагами берут Airflow, для преобразований в хранилище — dbt. Существуют и готовые сервисы без кода вроде Fivetran.
Что делать, если источник изменил формат данных?
Именно поэтому в ETL закладывают проверки: сверку количества строк, контроль типов и обязательных полей, уведомление при отклонении. Процесс лучше остановить с понятной ошибкой, чем молча загрузить испорченные данные — иначе отчёт покажет неверные цифры.