Как аналитик вы постоянно работаете с данными: извлекаете из источников, трансформируете, загружаете в хранилища. Но какой подход выбрать? API или веб-скрейпинг? ETL или ELT? Batch или streaming?
Неправильный выбор дорого обходится: тратите недели на построение пайплайна который ломается при каждом изменении структуры сайта, платите за инфраструктуру которая простаивает 90% времени, получаете данные с опозданием в 24 часа когда нужна актуальность в минутах.
Цифры индустрии 2026:
Объём данных в мире достиг 181 зеттабайт к концу 2025
75% Kubernetes деплоев используют Prometheus для мониторинга
ELT стал стандартом в современных облачных стеках данных
67% компаний используют Prometheus в продакшене
В статье: методы извлечения данных (API, веб-скрейпинг, CDC, базы), подходы к обработке (ETL vs ELT), batch vs streaming, матрица выбора подхода для каждого сценария, инструменты 2026, практические примеры и чек-лист принятия решений.
1. Методы извлечения данных: обзор
Извлечение данных это первый этап любого пайплайна. Выбор метода зависит от источника, доступности, объёма и требований к актуальности.
Четыре основных метода извлечения:
1. API (Application Programming Interface)
Официальный способ получения данных через структурированный интерфейс.
Как работает:
Отправляете HTTP запрос к эндпоинту
Получаете структурированные данные (JSON, XML)
Используете аутентификацию (API ключи, OAuth)
Соблюдаете rate limits (ограничения запросов)
Когда использовать:
API существует и предоставляет нужные данные
Критичная бизнес-задача требующая надёжности
Нужны структурированные данные с метаданными
Важна легальность и поддержка со стороны поставщика
Плюсы:
Стабильность: структура данных не меняется без предупреждения
Легальность: официальный способ доступа
Надёжность: техподдержка, SLA, документация
Чистота данных: структурированный формат сразу
Минусы:
Ограничения: rate limits, квоты на запросы
Неполнота: API может не предоставлять все поля
Стоимость: платные тарифы для больших объёмов
Зависимость: поставщик может закрыть или изменить API
Пример: Вы анализируете социальные сети. Twitter/X API предоставляет структурированные данные о твитах, но ограничивает 500K твитов в месяц на бесплатном тарифе. Для большего объёма нужен платный доступ.
2. Веб-скрейпинг
Автоматическое извлечение данных напрямую из HTML страниц.
Как работает:
Отправляете запрос к веб-странице
Получаете HTML код
Парсите HTML и извлекаете нужные элементы
Сохраняете в структурированном формате (CSV, JSON)
Когда использовать:
API не существует или не предоставляет нужные данные
Данные публично доступны на сайте
Нужна гибкость в выборе данных
Мониторинг конкурентов (цены, ассортимент)
Плюсы:
Доступность: можно извлечь любые публичные данные
Гибкость: выбираете что именно извлекать
Нет ограничений API: не зависите от квот
Бесплатно: не платите за доступ
Минусы:
Хрупкость: изменение HTML ломает скрейпер
Анти-бот защита: CAPTCHA, блокировки IP
Сложность: динамический контент (JavaScript) требует headless браузеров
Юридические риски: нужно соблюдать robots.txt и условия использования
Обслуживание: постоянная поддержка и обновление кода
Этика скрейпинга: Всегда проверяйте robots.txt, соблюдайте rate limits (не перегружайте сервер), используйте только публичные данные, не обходите аутентификацию. Убедитесь что скрейпинг не нарушает условия использования сайта.
3. Прямой доступ к базам данных
Извлечение данных напрямую из баз через SQL запросы или коннекторы.
Когда использовать:
Данные в вашей собственной базе или у вас есть доступ
Нужны транзакционные данные
Большие объёмы данных для аналитики
Миграция между системами
Методы:
Full dump: полная выгрузка таблицы
Incremental: только новые/изменённые записи (по timestamp)
CDC (Change Data Capture): отслеживание изменений в реальном времени через бинарные логи
4. Change Data Capture (CDC)
Отслеживание изменений в базе данных в реальном времени.
Как работает:
Читает бинарные логи базы данных (binlog в MySQL, WAL в PostgreSQL)
Отслеживает INSERT, UPDATE, DELETE операции
Передаёт изменения в целевую систему с минимальной задержкой
Когда использовать:
Нужна синхронизация в реальном времени
Миграция баз данных без даунтайма
Репликация данных между системами
Event-driven архитектуры
Плюсы:
Минимальная задержка (секунды)
Низкая нагрузка на источник (читает логи, не таблицы)
Полная история изменений
Минусы:
Сложность настройки
Требует доступа к бинарным логам
Специфика для каждой СУБД
2. ETL vs ELT: фундаментальное различие
ETL и ELT это две парадигмы обработки данных. Различие кажется незначительным (поменяли местами две буквы), но подходы радикально разные.
ETL: Extract, Transform, Load
Классический подход существующий с 1970-х.
Процесс:
Extract: извлекаем данные из источника
Transform: трансформируем данные на staging сервере (вне целевой системы)
Load: загружаем готовые данные в хранилище
Когда использовать ETL:
Целевая система не имеет достаточной вычислительной мощности
Нужна приватность: сырые данные содержат PII которые нельзя загружать в хранилище
Сложные трансформации требующие специализированных инструментов
Compliance требования: данные должны быть очищены до загрузки
Ограниченное хранилище: нельзя хранить сырые данные
Плюсы ETL:
Защита конфиденциальности: PII очищаются до попадания в хранилище
Меньше нагрузка на целевую систему
Подходит для старых систем с ограниченными ресурсами
Минусы ETL:
Медленнее: дополнительный этап трансформации
Дороже: нужен staging сервер
Сырые данные потеряны: нельзя переделать трансформации
Менее гибко: изменение логики требует перестройки всего пайплайна
ELT: Extract, Load, Transform
Современный подход ставший стандартом в облачных средах.
Процесс:
Extract: извлекаем данные из источника
Load: сразу загружаем сырые данные в хранилище
Transform: трансформируем внутри хранилища используя его вычислительную мощность
Когда использовать ELT:
Облачные хранилища с мощными вычислениями (Snowflake, BigQuery, Redshift)
Нужна гибкость: требования к трансформациям меняются
Важна скорость загрузки данных
Хотите сохранить сырые данные для будущих анализов
Команда знает SQL лучше чем ETL инструменты
Плюсы ELT:
Быстрее: данные попадают в хранилище мгновенно
Дешевле инфраструктура: не нужен staging сервер
Гибкость: сырые данные всегда доступны, можно переделать трансформации
Масштабируемость: используется мощность облачного хранилища
Проще для аналитиков: трансформации на SQL
Минусы ELT:
Риски приватности: сырые данные (включая PII) попадают в хранилище
Больше хранилища: храните и сырые и обработанные данные
Нагрузка на хранилище: трансформации расходуют compute
| Аспект | ETL | ELT |
|---|---|---|
Трансформация | До загрузки (на staging) | После загрузки (в хранилище) |
Скорость | Медленнее | Быстрее |
Инфраструктура | Нужен staging сервер | Не нужен staging |
Сырые данные | Теряются | Сохраняются |
Гибкость | Низкая | Высокая |
Подходит для | Legacy системы, compliance | Облачные хранилища |
Трансформации | ETL инструменты | SQL в хранилище |
Стоимость | Выше (staging) | Ниже |
Современный тренд: ELT стал стандартом де-факто для облачных стеков данных в 2026. Платформы вроде dbt, Coalesce автоматизируют трансформации в хранилище, делая ELT ещё удобнее.
3. Batch vs Streaming: когда нужна свежесть данных
Ещё одно ключевое решение: как часто обновлять данные?
Batch обработка
Традиционный подход: данные извлекаются и обрабатываются порциями в определённое время.
Как работает:
Данные накапливаются за период (час, день, неделя)
Запускается процесс обработки по расписанию
Вся порция обрабатывается за один запуск
Результат загружается в хранилище
Когда использовать batch:
Данные не требуют реального времени (отчёты, аналитика)
Большие объёмы данных
Сложные агрегации и вычисления
Ограниченный бюджет (batch дешевле)
Источник обновляется редко
Типичные интервалы:
Ежедневно: финансовые отчёты, сводки продаж
Ежечасно: аналитика веб-трафика
Еженедельно: агрегированная статистика
Плюсы batch:
Простота: легче разрабатывать и поддерживать
Эффективность: обработка большого объёма за раз
Дешевле: можно использовать spot instances
Предсказуемость: чёткое расписание
Минусы batch:
Задержка: данные устаревают до следующего запуска
Окна обработки: нужно время на выполнение
Сложность recovery: если batch упал, нужно перезапускать
Streaming обработка
Данные обрабатываются непрерывным потоком в реальном или почти реальном времени.
Как работает:
Данные поступают непрерывно (события, сенсоры, клики)
Обрабатываются сразу по мере поступления
Результаты доступны с минимальной задержкой (секунды)
Используются event brokers (Kafka, Redpanda)
Когда использовать streaming:
Критична свежесть данных (фрод-детекция, мониторинг)
Event-driven архитектура
IoT сенсоры генерирующие данные постоянно
Реал-тайм дашборды
Персонализация в реальном времени
Плюсы streaming:
Актуальность: данные свежие (секунды)
Отзывчивость: быстрая реакция на события
Непрерывность: нет окон обработки
Минусы streaming:
Сложность: сложнее разрабатывать и дебажить
Дороже: инфраструктура работает 24/7
Управление состоянием: сложнее чем batch
Debugging: сложнее воспроизвести проблемы
Пример выбора: Вы строите аналитику для e-commerce. Дашборд продаж руководителю можно обновлять раз в час (batch). Но фрод-детекция при оплате требует реального времени (streaming) — каждая секунда задержки это потенциальная потеря.
Гибридный подход
Многие компании используют оба подхода:
Streaming: критичные метрики в реальном времени
Batch: исторические агрегации и отчёты
Инструменты вроде Apache Beam позволяют использовать единый код для batch и streaming.
4. Матрица выбора подхода
Как решить какой подход использовать? Используйте эту матрицу принятия решений.
| Сценарий | Извлечение | Обработка | Частота |
|---|---|---|---|
| Финансовые отчёты из внутренней БД | Прямой доступ к БД | ETL (compliance) | Batch (ежедневно) |
| Мониторинг цен конкурентов | Веб-скрейпинг | ELT | Batch (ежечасно) |
| Аналитика соцсетей | API (Twitter, Facebook) | ELT | Batch (раз в час) |
| Фрод-детекция платежей | CDC из transactional БД | Streaming ETL | Real-time |
| IoT сенсоры производства | MQTT/Kafka | Streaming | Real-time |
| Агрегация продаж для BI | Warehouse connector | ELT (dbt) | Batch (ночью) |
| Персонализация рекомендаций | User events stream | Streaming | Real-time |
| Миграция между БД | CDC | ELT | Real-time |
| Сбор вакансий с job boards | Веб-скрейпинг | ELT | Batch (ежедневно) |
| Синхронизация CRM и ERP | API обеих систем | ELT | Batch (каждые 15 мин) |
5. Инструменты 2026: что использовать
Ландшафт инструментов огромен. Вот проверенные решения для каждого подхода.
ETL/ELT платформы (облачные)
| Инструмент | Тип | Плюсы | Когда использовать |
|---|---|---|---|
Fivetran | ELT SaaS | 500+ коннекторов, автоматическая адаптация к схеме | Нужна максимальная надёжность без кода |
Airbyte | ELT Open-source | Бесплатный, 200+ коннекторов, community | Ограниченный бюджет, нужна кастомизация |
dbt (Data Build Tool) | Transform (T в ELT) | SQL-based, version control, тестирование | Трансформации в хранилище |
Integrate.io | ETL/ELT | Low-code, CDC поддержка, визуальные workflow | Команда без глубоких технических навыков |
Stitch | ELT | Простота, batch-ориентирован | Простые batch ELT задачи |
Open-source ETL фреймворки
| Инструмент | Особенность | Лучше всего для |
|---|---|---|
Apache NiFi | Визуальный дизайн data flow, real-time | IoT, real-time ETL |
Apache Airflow | Оркестрация workflow, Python-based | Сложные batch пайплайны, зависимости задач |
Dagster | Data quality, observability | Команды применяющие software engineering практики |
Prefect | Python-native, упрощённый деплой | Динамические пайплайны, on-demand |
Облачные платформы (встроенные ETL)
AWS Glue: serverless Spark ETL, автоматический data catalog
Azure Data Factory: интеграция с Azure, batch/CDC, 90+ коннекторов
Google Cloud Dataflow: унифицированный batch + streaming, Apache Beam
Streaming платформы
Apache Kafka: event streaming стандарт, высокая пропускная способность
Apache Flink: stream processing, stateful computations
Apache Beam: унифицированная модель для batch и streaming
Веб-скрейпинг инструменты
Scrapy (Python): мощный фреймворк, нужен код
Playwright/Puppeteer: headless browsers для JavaScript сайтов
Octoparse: no-code, визуальный интерфейс
Apify: cloud-based, marketplace готовых скрейперов
6. Практические примеры с кодом
Пример 1: Batch ETL с Airflow
Ежедневная загрузка продаж из PostgreSQL в Snowflake.
# airflow_dag.py
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta
def extract_sales():
# Подключение к PostgreSQL
import psycopg2
conn = psycopg2.connect("dbname=sales user=analyst")
cursor = conn.cursor()
# Инкрементальная выгрузка за вчера
cursor.execute("""
SELECT * FROM sales
WHERE sale_date = CURRENT_DATE - 1
""")
return cursor.fetchall()
def transform_sales(data):
# Очистка и трансформация
cleaned = []
for row in data:
# Валидация, очистка дублей, обогащение
cleaned.append(transform_row(row))
return cleaned
def load_to_snowflake(data):
# Загрузка в Snowflake
import snowflake.connector
conn = snowflake.connector.connect(...)
cursor = conn.cursor()
cursor.executemany("INSERT INTO sales VALUES (?)", data)
dag = DAG(
'daily_sales_etl',
start_date=datetime(2026, 1, 1),
schedule_interval='0 2 * * *' # 2 AM каждый день
)
extract_task = PythonOperator(task_id='extract', python_callable=extract_sales, dag=dag)
transform_task = PythonOperator(task_id='transform', python_callable=transform_sales, dag=dag)
load_task = PythonOperator(task_id='load', python_callable=load_to_snowflake, dag=dag)
extract_task >> transform_task >> load_taskПример 2: ELT с dbt
Трансформация в Snowflake после загрузки сырых данных.
-- models/staging/stg_orders.sql
WITH source AS (
SELECT * FROM raw.orders
)
SELECT
order_id,
customer_id,
order_date,
CAST(total_amount AS DECIMAL(10,2)) as total_amount,
status,
-- Удаляем дубли
ROW_NUMBER() OVER (
PARTITION BY order_id
ORDER BY updated_at DESC
) as row_num
FROM source
WHERE row_num = 1-- models/marts/fct_daily_sales.sql
SELECT
DATE(order_date) as sale_date,
COUNT(DISTINCT order_id) as order_count,
SUM(total_amount) as total_revenue,
AVG(total_amount) as avg_order_value
FROM {{ ref('stg_orders') }}
WHERE status = 'completed'
GROUP BY 1Пример 3: Веб-скрейпинг с Scrapy
Сбор цен с сайта конкурента.
# competitor_prices_spider.py
import scrapy
class PricesSpider(scrapy.Spider):
name = 'prices'
start_urls = ['https://competitor.com/products']
def parse(self, response):
for product in response.css('.product-card'):
yield {
'name': product.css('.name::text').get(),
'price': product.css('.price::text').get(),
'url': product.css('a::attr(href)').get(),
'scraped_at': datetime.now()
}
# Пагинация
next_page = response.css('.next-page::attr(href)').get()
if next_page:
yield response.follow(next_page, self.parse)Запуск с расписанием через cron:
# Каждый час
0 * * * * cd /path/to/project && scrapy crawl prices -o prices.json7. Чек-лист выбора подхода
Используйте этот чек-лист при проектировании пайплайна.
Шаг 1: Определите источник данных
☐ Есть ли официальный API? (если да → используйте API)
☐ API предоставляет все нужные поля? (если нет → рассмотрите скрейпинг как дополнение)
☐ У вас есть прямой доступ к БД? (если да → CDC или прямые запросы)
☐ Данные публичны на сайте без API? (веб-скрейпинг)
Шаг 2: Определите требования к свежести
☐ Нужны данные в реальном времени (секунды)? → Streaming
☐ Достаточно обновления раз в час/день? → Batch
☐ Есть критичные метрики требующие real-time? → Гибрид (streaming + batch)
Шаг 3: Выберите ETL vs ELT
☐ Используете облачное хранилище (Snowflake, BigQuery)? → ELT
☐ Есть compliance требования к PII? → ETL (очистка до загрузки)
☐ Нужна гибкость трансформаций? → ELT (храните сырые данные)
☐ Ограниченная вычислительная мощность хранилища? → ETL
Шаг 4: Оцените ресурсы команды
☐ Есть data engineers? → Custom решения (Airflow, Spark)
☐ Только аналитики со знанием SQL? → ELT с dbt, SaaS инструменты (Fivetran)
☐ No-code команда? → Платформы вроде Integrate.io, Octoparse
Шаг 5: Учтите бюджет
☐ Ограниченный бюджет? → Open-source (Airbyte, Airflow)
☐ Готовы платить за надёжность? → SaaS (Fivetran, Stitch)
☐ Большие объёмы данных? → Оцените стоимость по usage-based pricing
Шаг 6: Продумайте мониторинг
☐ Как узнаете что пайплайн сломался?
☐ Настроены алерты на failures?
☐ Есть data quality проверки?
☐ Мониторите latency/freshness данных?
8. Типичные ошибки и как их избежать
Ошибка 1: Выбрали streaming когда достаточно batch
Проблема: Построили сложную streaming архитектуру для отчёта который руководитель смотрит раз в день.
Решение: Спросите себе: действительно ли нужны данные в реальном времени? Или достаточно обновления раз в час? Streaming дорог и сложен, используйте только когда критична задержка.
Ошибка 2: Потеряли сырые данные в ETL
Проблема: Загрузили только агрегированные данные. Через месяц бизнес хочет другие метрики, но сырых данных уже нет.
Решение: Храните сырые данные. Даже в ETL создайте слой raw data прежде чем трансформировать. Дисковое пространство дешевле чем повторная загрузка исторических данных.
Ошибка 3: Скрейпер без error handling
Проблема: Скрейпер падает при изменении HTML. Вы узнаёте об этом через неделю когда заметили что данные не обновляются.
Решение:
Добавьте retry логику
Настройте алерты на failures
Используйте селекторы которые меньше ломаются (data attributes вместо классов)
Сохраняйте HTML для debugging
Ошибка 4: Игнорировали rate limits API
Проблема: Превысили лимит API, получили бан на 24 часа. Пайплайн сломался.
Решение:
Изучите документацию API по rate limits
Добавьте exponential backoff при 429 ошибках
Используйте кеширование когда возможно
Оцените нужен ли вам платный тариф с большими лимитами
Ошибка 5: Нет идемпотентности
Проблема: Пайплайн упал на половине. Перезапустили, получили дубли данных.
Решение: Делайте пайплайны идемпотентными. Повторный запуск с теми же параметрами должен давать тот же результат. Используйте upsert вместо insert, проверяйте существование записей перед загрузкой.
Ошибка 6: Нет версионирования схемы
Проблема: Источник изменил структуру данных. Пайплайн сломался.
Решение:
Используйте schema registry (Confluent Schema Registry)
Версионируйте схемы данных
Добавьте валидацию схемы в пайплайн
Настройте алерты на schema changes
9. Продвинутые паттерны 2026
1. Lambda Architecture
Комбинация batch и streaming для лучшего из двух миров.
Batch layer: точные агрегации исторических данных
Speed layer: приближённые агрегации в реальном времени
Serving layer: объединяет результаты обоих слоёв
Когда использовать: нужна и точность и низкая latency.
2. Change Data Capture + Event Sourcing
Вместо перезаписи данных сохраняете полную историю изменений.
CDC отслеживает каждое изменение
Сохраняете events в Kafka
Можете воспроизвести любое состояние на любой момент времени
3. Reverse ETL
Обратный поток: из хранилища данных обратно в операционные системы.
Пример: Обогащённые данные из хранилища загружаются обратно в CRM для персонализации.
Инструменты: Hightouch, Census
10. Заключение: как принять решение
Выбор подхода к извлечению и обработке данных зависит от множества факторов. Нет универсального решения.
Ключевые принципы:
Начинайте с простого: не переусложняйте. Batch + ELT покрывает 80% задач
Официальные API первыми: если API существует используйте его прежде чем писать скрейпер
Храните сырые данные: даже если сейчас не нужны они понадобятся позже
Мониторинг с первого дня: алерты на failures data quality checks
Документируйте решения: почему выбрали этот подход какие компромиссы
Итеративный подход: начните с MVP масштабируйте по мере необходимости
Быстрая матрица решений:
| Если... | То... |
|---|---|
| Есть официальный API | Используйте API |
| API нет, данные публичные | Веб-скрейпинг (соблюдайте этику) |
| Доступ к БД, нужна синхронизация | CDC |
| Облачное хранилище | ELT |
| Compliance требования | ETL |
| Свежесть критична (секунды) | Streaming |
| Обновление раз в час/день достаточно | Batch |
| Ограниченный бюджет | Open-source (Airbyte, Airflow) |
| Платите за надёжность | SaaS (Fivetran, Stitch) |
| Команда знает только SQL | dbt для трансформаций |
Следующие шаги:
Определите ваши источники данных и требования
Пройдите чек-лист из раздела 7
Выберите инструменты из раздела 5
Постройте MVP пайплайна
Добавьте мониторинг и алерты
Итеративно улучшайте
Главное: правильный подход это тот который решает вашу задачу с минимальной сложностью и стоимостью. Не гонитесь за хайпом. Streaming это круто но batch может быть достаточно. Open-source дёшев но SaaS экономит время команды. Выбирайте осознанно.
А лучшие вакансии для продуктовых, системных и бизнес аналитиков ищите на hirehi.ru