Learning Platform
Глоссарий Troubleshooting
Урок 05.02 · 25 мин
Начальный
ИсточникиAPIWebhooksSaaS

Источники данных в типичной компании

Когда DE приходит в новый проект, первый вопрос — «что у нас за источники?». Источников обычно много, они разные по характеру, и для каждого нужен свой подход.

В этом уроке — обзор шести главных типов источников с примерами.


Карта источников

Источники данных в типичной компании
Транзакционные БД
REST/GraphQL API
Файлы (CSV, Excel)
События
3rd-party SaaS
Логи приложений

1. Транзакционные БД

Главный источник для большинства компаний. Production-БД, где приложение пишет заказы, пользователей, продукты.

Типичные технологии

  • Postgres — самая популярная open-source. Богатый функционал.
  • MySQL — широко распространена в web.
  • MongoDB — NoSQL, JSON-документы.
  • Oracle / SQL Server — enterprise legacy.
  • DynamoDB / Cosmos DB — managed NoSQL в облаках.

Как DE с ними работает

Есть три подхода:

Способы доступа к транзакционным БД
JDBC pull
Read replica
CDC (Debezium)

Что выбрать:

  • Малые таблицы — JDBC pull через Fivetran/Airbyte.
  • Большие таблицы, нужна свежесть — read replica + Fivetran/CDC.
  • Real-time нужен — CDC через Debezium + Kafka.
Debezium CDC: чтение WAL из Postgres и MySQL для real-time синхронизации в DWH

Углубление CDC — debezium-course.

Грабли

  • Не делай SELECT в production. Используй replica или CDC.
  • Не забудь updated_at. Без него incremental невозможен.
  • Smart-on-delete. Если в источнике hard delete, без CDC ты не узнаешь.

2. REST / GraphQL API

API-источники: SaaS-сервисы, внутренние микросервисы, внешние партнёры.

Примеры

  • Salesforce — CRM.
  • Stripe — платежи.
  • Hubspot — маркетинг.
  • Google Ads / Facebook Ads — реклама.
  • Mixpanel / Amplitude — продуктовая аналитика.

Как работают

REST API — пишем HTTP-запрос, получаем JSON:

curl -H "Authorization: Bearer $TOKEN" \
  https://api.stripe.com/v1/charges?created[gte]=1715817600

# Возвращает JSON с charges

DE-задачи:

  • Аутентификация — OAuth, API keys, JWT.
  • Пагинация — большой результат разбит по страницам.
  • Rate limits — API не любит, когда долбят. 100 req/sec — обычный лимит.
  • Schema changes — API может добавить поле, и пайплайн должен это пережить.

Инструменты

  • Fivetran / Airbyte — готовые коннекторы к 400+ API.
  • dlt — пишешь Python-функцию, она становится коннектором.
  • Кастомный Python в Airflow — для нестандартных API.

Пример dlt

import dlt
from dlt.sources.helpers import requests

@dlt.resource
def stripe_charges(api_key, start_date):
    url = f"https://api.stripe.com/v1/charges"
    headers = {"Authorization": f"Bearer {api_key}"}
    params = {"created[gte]": start_date}

    while True:
        resp = requests.get(url, headers=headers, params=params)
        data = resp.json()
        yield data["data"]
        if not data.get("has_more"):
            break
        params["starting_after"] = data["data"][-1]["id"]

pipeline = dlt.pipeline(destination="snowflake", dataset_name="stripe")
pipeline.run(stripe_charges(api_key="...", start_date="2026-01-01"))

3. Файлы

Файлы часто встречаются у партнёров и в legacy:

  • ERP-системы экспортируют Excel/CSV.
  • Старые партнёры присылают CSV по email или SFTP.
  • Cloud-сервисы пишут JSON-логи в S3.
  • Современные пайплайны — Parquet в S3.

Форматы

Файловые форматы
CSV
Excel
JSON / JSONL
Parquet
Avro
ORC

Подробнее форматы — модуль 04-storage-formats.

Как DE с ними работает

  • CSV/Excel от партнёров — приходят в S3 / SFTP / email. Cron-скрипт парсит и грузит в DWH.
  • JSON-логи — Fluentd/Logstash собирают в S3. Spark / Snowflake читают.
  • Parquet в S3 — Lakehouse-формат. Iceberg/Delta поверх.

Грабли с CSV

  • Кодировки — UTF-8 vs Windows-1251 vs Latin-1.
  • Разделители — comma vs semicolon vs tab.
  • Кавычки"Имя, Фамилия" vs Имя, Фамилия.
  • Переводы строк внутри полей — портят парсинг.
  • Дробные числа1,234.50 vs 1234,50 (US vs EU).

CSV — анти-паттерн для нового пайплайна, но реальность: 30% источников до сих пор CSV.


4. События (event streams)

Real-time потоки сообщений: каждое событие — отдельная запись.

Типичные технологии

  • Apache Kafka — стандарт индустрии. Распределённый log.
  • AWS Kinesis — managed Kafka на AWS.
  • Google Pub/Sub — managed на GCP.
  • RabbitMQ — традиционный message broker.
  • Redis Streams — лёгкий вариант.

Когда нужны

  • Антифрод — нужно реагировать за секунды.
  • Рекомендации в реальном времени — клик -> обновлённый feed.
  • Микросервисы между собой — event-driven архитектура.
  • Лог-агрегация — миллионы событий в секунду.

Как DE с ними работает

Event pipeline
Producer (микросервис)
Kafka topic: orders.events
Flink (real-time)
Sink в DWH (batch)
Archive в S3
Kafka: distributed commit log как backbone event streaming инфраструктуры

Углубление — наш kafka-course.


5. Webhooks

Подвид push-источников. SaaS-сервис (Stripe, Shopify) вызывает твой HTTP endpoint при событии.

Примеры

  • Stripe webhook на payment_intent.succeeded — клиент оплатил.
  • Shopify webhook на order.created — новый заказ в магазине.
  • GitHub webhook на push — кто-то запушил код.
  • Twilio webhook на SMS-delivery.

Как DE с ними работает

Endpoint — это обычно НЕ напрямую в DWH:

SaaS -> webhook endpoint (Cloud Function) -> Kafka topic -> Sink в DWH

Зачем такая цепочка:

  • Reliability — если DWH временно недоступен, Kafka буферизует.
  • Idempotency — Stripe может отправить одно событие дважды. Дедупликация в pipeline.
  • Speed — webhook должен ответить за 5 секунд, или Stripe будет ретраить.

6. 3rd-party SaaS

Отдельно выделим SaaS как категорию источников (хотя технически это API):

Типичные SaaS-источники
Salesforce
Stripe
Hubspot
Mixpanel / Amplitude
Zendesk / Intercom
Ads platforms

DE обычно не пишет кастомные коннекторы к этим — используют Fivetran/Airbyte. Цена — заметная, но дешевле, чем 6 месяцев работы инженера.


Типичный inventory источников в средней компании

Скрапнут scenarii e-commerce, 200 человек:

ИсточникТипОбъёмКак ingest
Postgres productionOLTP50 GBFivetran (incremental)
StripeAPI100k transactions/dayFivetran + webhooks
SalesforceSaaS API500k contactsFivetran (daily)
Google AdsSaaS API50k ad metrics/dayFivetran (daily)
MixpanelSaaS API10M events/dayFivetran (hourly)
Frontend eventsWebhook -> Segment50M events/daySegment -> Snowpipe
Партнёрские CSVSFTP1 GB/dayAirflow + S3
App logsFiles100 GB/dayFluentd -> S3

Это типичная картина. 8-15 источников. Сложность не в количестве, а в поддержке: каждый источник может сломаться, schema может поменяться, rate limits могут стрельнуть.


Попробуй сам

  1. Подумай о любой компании, которую ты знаешь (Yandex, Wildberries, твой банк). Перечисли 5 источников данных, которые у них точно есть. Какие из них API, какие — внутренние БД, какие — события?
  2. Открой документацию любого API (Stripe API docs, GitHub API). Посмотри: какие методы есть для incremental ingestion — есть ли поле updated_at или его аналог?
Проверка знанийKnowledge check
Почему DE обычно используют готовые коннекторы (Fivetran, Airbyte) для популярных SaaS-источников (Salesforce, Stripe), а не пишут собственные интеграции?
ОтветAnswer
Готовые коннекторы решают целую серию проблем, на которые ушли бы месяцы инженерной работы для каждого источника: аутентификация (OAuth, refresh tokens, многоступенчатые потоки), пагинация (cursor-based, page-based, отличающаяся между endpoints), rate limits (с backoff и retry), schema discovery и evolution (когда SaaS добавляет поля), incremental syncs (поддержка различных стратегий — updated_at, last_modified, deleted records), monitoring и алерты. Кастомный коннектор для Salesforce — это 2-4 недели работы senior-инженера плюс постоянная поддержка (Salesforce обновляет API), легко уходящая в 100+ часов в год. Подписка на Fivetran для Salesforce обходится в ~$1000-3000/мес, что сильно дешевле работы инженера. Кастомные коннекторы пишут только для нестандартных источников (внутренние API, экзотические партнёры) или когда managed-сервис экономически невыгоден на огромных объёмах (петабайты).

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Какой источник является 'главным' для большинства DE-команд в типичной компании?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4