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