Содержание
«Данные есть, но они везде» — так описывают свою проблему большинство клиентов которые к нам приходят. CRM живёт отдельно, 1С отдельно, рекламные кабинеты отдельно, склад отдельно. Аналитик тратит 70% времени на то чтобы собрать данные из всех источников — и только 30% на сам анализ.
ETL-пайплайн решает эту проблему раз и навсегда. В этой статье объясним что это такое, когда он нужен и как его построить.
1. Что такое ETL простыми словами
ETL — аббревиатура от трёх слов: Extract (извлечение), Transform (трансформация), Load (загрузка). Это процесс который автоматически:
- Извлекает данные из разных источников — баз данных, API, файлов, сайтов
- Трансформирует их — очищает, приводит к единому формату, считает метрики
- Загружает в целевое хранилище — базу данных, Data Warehouse, Excel, дашборд
API
1С
Excel
Приведение
Агрегация
Обогащение
Dashboard
BI
Excel
Пайплайн запускается автоматически по расписанию — каждые 15 минут, раз в час или каждое утро в 8:00. Данные всегда актуальны без участия человека.
2. Когда бизнесу нужен ETL-пайплайн
ETL нужен когда у вас есть хотя бы один из этих признаков:
- Аналитик или менеджер тратит больше часа в день на сбор данных из разных систем
- Отчёты готовятся вручную в Excel путём копирования из нескольких источников
- Данные в разных системах расходятся — в CRM одни цифры, в 1С другие
- Руководство просит отчёт — и его нет под рукой, нужно готовить
- Рекламная аналитика из 3+ кабинетов собирается вручную каждую неделю
3. Пример ETL на Python
Разберём реальный пример: собираем данные о продажах из PostgreSQL и API рекламного кабинета, объединяем и загружаем в Google Sheets.
# pip install pandas psycopg2 gspread google-auth requests import pandas as pd import psycopg2 import requests import gspread from datetime import date, timedelta # ── EXTRACT ───────────────────────────────────── # 1. Данные из PostgreSQL (продажи) conn = psycopg2.connect( host='db.company.ru', database='sales', user='reader', password='secret' ) yesterday = date.today() - timedelta(days=1) df_sales = pd.read_sql(f""" SELECT date, product, revenue, orders FROM sales WHERE date = '{yesterday}' """, conn) # 2. Данные из API рекламного кабинета (расходы) resp = requests.get( 'https://api.ads.example.com/stats', params={'date': yesterday, 'token': 'API_TOKEN'} ) df_ads = pd.DataFrame(resp.json()['data']) # ── TRANSFORM ──────────────────────────────────── # Объединяем данные по продукту df = df_sales.merge(df_ads, on='product', how='left') # Считаем метрики df['roas'] = df['revenue'] / df['ad_spend'].replace(0, 1) df['cpo'] = df['ad_spend'] / df['orders'].replace(0, 1) # Округляем и форматируем df['roas'] = df['roas'].round(2) df['date'] = df['date'].astype('str') # ── LOAD ───────────────────────────────────────── # Загружаем в Google Sheets gc = gspread.service_account(filename='credentials.json') sheet = gc.open('Ежедневный отчёт').worksheet('Данные') # Добавляем строки к существующим данным sheet.append_rows(df.values.tolist()) print(f'Загружено {len(df)} строк за {yesterday}')
Этот скрипт запускается каждое утро в 8:00 через cron — и к началу рабочего дня свежие данные уже в Google Sheets.
4. Инструменты для ETL-пайплайнов
Apache Airflow
Самый популярный оркестратор пайплайнов с открытым исходным кодом. Пайплайны описываются как DAG (направленные ациклические графы) на Python. Есть веб-интерфейс, мониторинг, повторные запуски при сбоях.
Подходит для: сложных пайплайнов с зависимостями, большой команды, production-окружения.
Минус: требует отдельного сервера, сложная первоначальная настройка.
Prefect
Более современная альтернатива Airflow. Проще в настройке, есть бесплатный облачный UI, лучше обрабатывает ошибки. Код пишется обычными Python-функциями с декораторами.
Подходит для: средних команд, когда Airflow избыточен.
n8n / Make
No-code платформы с визуальным редактором. Подходят для простых пайплайнов без сложной трансформации данных. Быстро настраивается, не нужен Python.
Подходит для: простых интеграций между сервисами, нетехнических команд.
Простой cron + Python
Для несложных пайплайнов — скрипт на Python + задача в cron. Никаких зависимостей, просто и надёжно.
Подходит для: малого и среднего бизнеса, 1–3 источника данных.
5. Сравнение инструментов
| Инструмент | Сложность | Масштаб | Стоимость | Когда выбирать |
|---|---|---|---|---|
| cron + Python | Низкая | Малый | Бесплатно | 1–3 источника, простая логика |
| n8n | Низкая | Малый–средний | Бесплатно / от $20 | Нет Python, нужна визуализация |
| Prefect | Средняя | Средний | Бесплатно / от $200 | Средняя команда, нужен мониторинг |
| Airflow | Высокая | Большой | Сервер + время | Сложные зависимости, большая команда |
6. Как начать
Если вы только начинаете — не берите сразу Airflow. Следуйте принципу минимальной сложности:
- Определите один конкретный отчёт который сейчас собирается вручную
- Напишите Python-скрипт который делает то же самое автоматически
- Запустите его через cron каждый день
- Когда пайплайнов станет 5+ — переходите на Prefect или Airflow
Нужен ETL-пайплайн под ключ?
Гиперсайт строит ETL-пайплайны с 2015 года. Расскажите о своих источниках данных — предложим архитектуру и стоимость бесплатно.
Узнать стоимость