Пакетная обработка данных
1) Назначение и ценность
Batch-конвейеры формируют надежные ежедневные/почасовые витрины для:- Регуляторной и финансовой отчетности (GGR/NGR, налоги, RG/AML реестры).
- BI и продуктовой аналитики (когорты, LTV, конверсионные воронки).
- Сверок точности (OLTP↔DWH, провайдеры/PSP), историзации (SCD).
- Подготовки фичей и обучающих наборов для ML.
Ключевые свойства: предсказуемость, полнота, воспроизводимость, низкая стоимость на единицу данных.
2) Архитектура (референс)
1. Ingest (raw capture): HTTP/gRPC, CDC из OLTP, провайдерские выгрузки → Bronze.
2. Lakehouse: Bronze (raw, append-only) → Silver (clean/conform) → Gold (serve).
3. Оркестрация: Airflow/Dagster/Prefect (DAG’и, зависимости, ретраи, SLA).
4. Обработка: Spark/Trino/DBT/SQL-движки; партиционирование и ACID-форматы (Delta/Iceberg/Hudi).
5. DQ и Контракты: Schema Registry, DQ-правила (YAML/SQL), consumer-tests.
6. Сервинг: BI/семантический слой, отчетные экспорты (CSV/PDF/JSON + hash), API/GraphQL.
7. Наблюдаемость: метрики пайплайнов, lineage, логи, стоимость (cost/GB, cost/query).
3) Частоты и SLAs
Ежедневные (D+1 до 06:00 лок.): отчеты GGR, регуляторные выгрузки, сверки.
Почасовые/квазиреалтайм: оперативные панели для Ops/Финансов.
Недельные/месячные: финконсолидация, модели и ретропроцессы.
- Gold-ежедневные витрины готовы до 06:00 локального времени.
- Freshness Silver p95 ≤ 15 мин для микробатчей / ≤ 2 ч для дневных.
- Completeness ≥ 99.5%, Validity (схема) ≥ 99.9%.
4) Инкрементальные загрузки и CDC
Подходы:- CDC (Change Data Capture): Debezium/лог-репликация → Bronze → инкременты в Silver.
- Watermark по времени: `updated_at > max_loaded_ts`.
- Хэш-сравнение: `md5(row)` для детекта изменений.
- Upsert/Merge: идемпотентные обновления Silver/Gold.
sql
MERGE INTO silver. payments AS s
USING staging. payments_delta AS d
ON s. transaction_id = d. transaction_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
5) SCD (историзация измерений)
SCD I: перезапись (орфография, минорные исправления).
SCD II: полнофункциональная история (`valid_from/valid_to/is_current`).
SCD III: «до/после» для кратких сравнений.
sql
MERGE INTO dim. users_scd t
USING stage. users u
ON t. user_pseudo_id = u. user_pseudo_id AND t. is_current = TRUE
WHEN MATCHED AND (t. country <> u. country OR t. rg_status <> u. rg_status)
THEN UPDATE SET t. is_current = FALSE, t. valid_to = CURRENT_TIMESTAMP
WHEN NOT MATCHED
THEN INSERT (user_pseudo_id, country, rg_status, valid_from, valid_to, is_current)
VALUES (u. user_pseudo_id, u. country, u. rg_status, CURRENT_TIMESTAMP, NULL, TRUE);
6) Backfill и Reprocessing
Backfill: первичное заполнение/историческая догрузка.
Reprocessing: перерасчет витрин после правок логики/исправления данных.
- Идемпотентность (MERGE/upsert), неизменяемость Bronze, версионирование логики.
- Time-travel для повторных прогонов; снапшоты метаданных.
- Guardrails: ограничение диапазонов, квот и конкурентных джобов.
- Документация: runbook с шагами и критериями завершения.
7) Моделирование слоев
Bronze:- Append-only, партиции `event_date`, `jurisdiction`, `tenant`.
- Храним исходный payload (для форензики), фиксируем `ingested_at`.
- Нормализация и стандартизация: FK/справочники, дедуп, FX/таймзоны.
- Таблицы фактов/измерений (3NF/BCNF), SCD для ключевых измерений.
- Денормализованные витрины под BI/регуляторку/финансы, SLA готовности.
- Материализация агрегатов; неизменяемые артефакты экспорта (hash + WORM).
8) Качество данных (DQ-как-код)
Пример YAML-правил для Silver:yaml table: silver. payments slo:
freshness_minutes: 15 completeness_percent: 99. 5 rules:
- name: amount_positive type: range column: amount_base min: 0. 01 severity: critical
- name: currency_whitelist type: in_set column: currency set: [EUR,USD,GBP,TRY,BRL]
severity: major
- name: unique_tx type: unique columns: [transaction_id]
severity: critical
- name: fk_user type: foreign_key column: user_pseudo_id ref_table: dim. users_scd severity: critical
Политики реакции: critical → fail job + DLQ; major/minor → тег + отчет.
9) Семантический слой и отчетность
Единые определения метрик (GGR/NGR, ARPPU, Retention) в semantic-layer/metrics-store.
Версионирование метрик; интеграция с BI/экспортными пакетами.
Отчеты: CSV/JSON/PDF + sha256, журнал выгрузок и Legal Hold при необходимости.
10) Приватность, резидентность, безопасность
PII-минимизация: псевдонимизация пользователей; маппинг — в отдельном защищенном контуре.
Data residency: раздельные каталоги/ключи по EEA/UK/BR; запрет кросс-региональных join’ов без правового основания.
Шифрование: TLS in-transit; KMS/CMK at-rest; контроль экспортов.
DSAR/RTBF: вычислимые проекции, селективные редактирования; аудит доступов.
Legal Hold: WORM-архивы для регуляторных артефактов.
11) Производительность и стоимость
Партиционирование по дате/рынку/тенанту; Z-order/cluster по частым предикатам.
Форматы: Parquet + ACID-таблицы; компрессия/статистика, OPTIMIZE/VACUUM.
Материализация: стабильные агрегации в Gold; избегать «монолитных» джобов.
Квоты/бюджеты: chargeback по командам; лимиты на backfill/тяжелые запросы.
Планирование: окна низкой нагрузки (ночь/выходные), приоритеты очередей.
12) Наблюдаемость и управление
Метрики пайплайнов: duration, success rate, retries, rows processed, cost/query.
DQ-метрики: completeness, validity, uniqueness, FK-ошибки, drift.
Freshness heatmap: по доменам и рынкам; SLA-дашборды.
Lineage: происхождение от Bronze до отчетов; impact-анализ перед изменениями.
Алерты: SLO-бюджеты, деградации DQ, задержки, рост стоимости.
13) Примеры SQL/моделей
Нормализация валют (Silver):sql
CREATE OR REPLACE TABLE silver. payments AS
SELECT p. transaction_id,
p. user_pseudo_id,
p. currency,
p. amount_orig,
r. rate AS fx_rate_used,
p. amount_orig r. rate AS amount_base,
p. market,
CAST(p. event_time AS TIMESTAMP) AS event_time
FROM bronze. payment_events p
JOIN dim. fx_rates r
ON r. date = DATE(p. event_time)
AND r. ccy_from = p. currency AND r. ccy_to = 'EUR';
Ежедневная витрина GGR (Gold):
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
b. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;
Контроль полноты (DQ SQL):
sql
SELECT market, event_date, COUNT() AS n
FROM silver. fact_bets
GROUP BY market, DATE(event_time) AS event_date
HAVING n = 0;
14) Процессы и RACI
R (Responsible): Data Engineering (DAG’и, модели Silver/Gold), Data Platform (инфра, регистр схем, DQ).
A (Accountable): Head of Data / Chief Data Officer.
C (Consulted): Compliance/Legal/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML), SRE (SLO/стоимость).
I (Informed): BI/Продукт/Маркетинг/Операции.
15) Дорожная карта внедрения
MVP (4–6 недель):1. Lakehouse Bronze/Silver (ACID-формат), CDC/инкременты для 2–3 доменов.
2. DQ-как-код: 10–15 правил для Payments/Gameplay + CI-валидация.
3. Первая Gold-витрина (GGR Daily) с SLA до 06:00; отчетный экспорт + hash.
4. Дашборды Freshness/Completeness/Cost, базовые алерты.
Фаза 2 (6–12 недель):- SCD II для users/games/providers; расширение доменов.
- Семантический слой метрик; сверки с OLTP/провайдерами (accuracy).
- Процедуры backfill/reprocessing, lineage и impact-анализ, регионализация (EEA/UK).
- Автосимуляция изменений (dry-run), бюджеты/квоты, chargeback.
- Автоматическая документация (data product pages), DR-учения и time-travel-восстановления.
- Оптимизация стоимости (кластеризация, материализация, TTL, вакуум).
16) Чек-лист перед продом
- Контракты и схемы в Registry, тесты совместимости зеленые.
- Инкрементальные загрузки/CDC работают, MERGE идемпотентен.
- DQ-правила активны; critical → fail + DLQ; отчет о нарушениях.
- SLA/дашборды свежести/полноты; алерты настроены.
- Политики PII/DSAR/RTBF/Legal Hold подтверждены Legal/DPO.
- Runbook’и backfill/reprocessing/DR протестированы.
- Стоимость под контролем (cost/query, cost/GB, квоуты).
17) Анти-паттерны и как избежать
Монолитные ночные джобы: дробите на независимые шаги, параллельте по партициям.
Full-reload без нужды: используйте инкременты/CDC/мерджи.
Смешение PII в аналитике: держите маппинги отдельно, применяйте CLS/RLS.
Отсутствие DQ/lineage: вводите DQ-как-код и отслеживайте происхождение.
«Ручные» backfill’ы: автоматизируйте и документируйте, ограничивайте диапазоны.
Неуправляемая стоимость: кластеризация, материализация, ретеншн-политики.
18) Глоссарий (кратко)
CDC — захват изменений из OLTP.
SCD — медленно меняющиеся измерения (I/II/III).
Lakehouse — data lake + ACID-таблицы.
MERGE/Upsert — идемпотентные операции обновления.
Time-travel — чтение исторических версий таблиц.
WORM — неизменяемое хранение артефактов.
19) Итог
Пакетная обработка — это дисциплина предсказуемых, воспроизводимых и комплаентных конвейеров. Следуя принципам schema-first, инкрементам/CDC, SCD-историзации, DQ-как-код, наблюдаемости и осознанной экономике, вы получите стабильные Gold-витрины и отчеты, проверяемые сверками и готовые к аудиту в любой момент.