Пакетна обробка даних
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-вітрини і звіти, що перевіряються звірками і готові до аудиту в будь-який момент.