Содержание

  1. Что такое ETL простыми словами
  2. Когда бизнесу нужен ETL-пайплайн
  3. Пример ETL на Python
  4. Инструменты: Airflow, Prefect, n8n
  5. Сравнение инструментов
  6. Как начать

«Данные есть, но они везде» — так описывают свою проблему большинство клиентов которые к нам приходят. CRM живёт отдельно, 1С отдельно, рекламные кабинеты отдельно, склад отдельно. Аналитик тратит 70% времени на то чтобы собрать данные из всех источников — и только 30% на сам анализ.

ETL-пайплайн решает эту проблему раз и навсегда. В этой статье объясним что это такое, когда он нужен и как его построить.

1. Что такое ETL простыми словами

ETL — аббревиатура от трёх слов: Extract (извлечение), Transform (трансформация), Load (загрузка). Это процесс который автоматически:

  1. Извлекает данные из разных источников — баз данных, API, файлов, сайтов
  2. Трансформирует их — очищает, приводит к единому формату, считает метрики
  3. Загружает в целевое хранилище — базу данных, Data Warehouse, Excel, дашборд
Extract
PostgreSQL
API

Excel
Transform
Очистка
Приведение
Агрегация
Обогащение
Load
DWH
Dashboard
BI
Excel

Пайплайн запускается автоматически по расписанию — каждые 15 минут, раз в час или каждое утро в 8:00. Данные всегда актуальны без участия человека.

2. Когда бизнесу нужен ETL-пайплайн

ETL нужен когда у вас есть хотя бы один из этих признаков:

  • Аналитик или менеджер тратит больше часа в день на сбор данных из разных систем
  • Отчёты готовятся вручную в Excel путём копирования из нескольких источников
  • Данные в разных системах расходятся — в CRM одни цифры, в 1С другие
  • Руководство просит отчёт — и его нет под рукой, нужно готовить
  • Рекламная аналитика из 3+ кабинетов собирается вручную каждую неделю
Правило ETL: если вы делаете одно и то же действие с данными чаще одного раза в неделю — это кандидат на автоматизацию через ETL-пайплайн.

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. Следуйте принципу минимальной сложности:

  1. Определите один конкретный отчёт который сейчас собирается вручную
  2. Напишите Python-скрипт который делает то же самое автоматически
  3. Запустите его через cron каждый день
  4. Когда пайплайнов станет 5+ — переходите на Prefect или Airflow
Золотое правило: начните с малого и работающего, а не с идеального и сложного. Простой скрипт который работает — лучше идеального Airflow который никогда не будет настроен.

Нужен ETL-пайплайн под ключ?

Гиперсайт строит ETL-пайплайны с 2015 года. Расскажите о своих источниках данных — предложим архитектуру и стоимость бесплатно.

Узнать стоимость