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 закладають перевірки: звірку кількості рядків, контроль типів і обовʼязкових полів, сповіщення при відхиленні. Процес краще зупинити зі зрозумілою помилкою, ніж мовчки завантажити зіпсовані дані — інакше звіт покаже хибні цифри.

Повʼязані терміни