GH GambleHub

Цілісність даних

1) Що таке цілісність даних

Цілісність даних - це набір властивостей і контролів, що гарантує, що дані коректні, узгоджені і несуперечливі на всьому життєвому циклі: від джерел і трансформацій до вітрин, API і експортів. Мета - щоб одне і те ж твердження давало однакову відповідь при повторенні, а будь-які зміни були трасовані і перевіряються.


2) Типи цілісності і де вони живуть

Сутнісна (Entity): унікальні первинні ключі, відсутність дублікатів.
Посилальна (Referential): коректні зв'язки FK; відсутність «висячих» посилань.
Доменна (Domain): допустимі діапазони і формати (тип, довжина, довідники).
Бізнес-правила: інваріанти предметної області (баланс ≥ 0, сума проводок = 0 і т.п.).
Тимчасова: монотонність і узгодженість часових міток, коректні тайм-зони.
Політики доступу: RLS/CLS не порушують логічну узгодженість видимих даних.


3) Контракти даних і схеми (джерело істини)

Задаємо формальні контракти для наборів і подій; застосовуємо їх на вході і після кожної трансформації.

Приклад (YAML, спрощено):
yaml dataset: payments primary_key: txn_id foreign_keys:
- fk: user_id -> users.user_id schema:
- {name: txn_id, type: string, unique: true}
- {name: user_id, type: string, not_null: true}
- {name: amount, type: decimal(18,2), min: 0}
- {name: currency, type: string, in: [USD,EUR,TRY,UAH]}
- {name: event_time, type: timestamp, tz: UTC}
dq_rules:
- "duplicates(txn_id)=0"
- "ref_integrity(user_id, users.user_id)=true"
- "sum(amount) >= 0"
evolution:
semver: [MAJOR, MINOR, PATCH]
breaking_changes_require: approval:data-governance

4) Транзакційні гарантії та ізольованість

ACID для OLTP: атомарність, консистентність, ізольованість, довговічність.
Рівні ізоляції: Read Committed/Repeatable Read/Serializable - вибирайте під ризик «брудних «/неповторних/фантомних читань.
OLAP и lakehouse: атомарні коміти таблиць (transaction log), idempotent sink і schema-evolution з контролем сумісності.
Узгодженість формул KPI: семантичний шар → одна істина для звітів і API.


5) Розподілені системи: порядок, повтори, ідемпотентність

Порядок подій: використовуємо'event _ time'+'ingested _ at', watermarks і допуск lateness; агрегати на підставі event time.
Повторна доставка (at-least-once): глобальний'event _ id', таблиці idempotency keys, upsert/merge за стійким ключем.
Out-of-order: перерахунок вікон, стратегія затримок, компенсації.
Exactly-once за змістом: транспорт може бути at-least-once, приймач - ідемпотентний.


6) Валідація цілісності (DQ) на кожному шарі

Включаємо правила цілісності в CI/CD і в рантайм пайплайнів:
  • Freshness/Completeness/Uniqueness/Valid Values/Referential Integrity.
  • Аномалії: сплески дублікатів, розриви часу, різкі зрушення розподілів.
  • Контроль формул KPI: версійність розрахунків і тести на збіг результатів (golden sets).
  • Контроль експорту: заборона видачі наборів з порушеннями (quarantine).
Приклад (Great Expectations-стиль):
yaml expect_column_values_to_be_unique: {column: txn_id}
expect_column_values_to_not_be_null: {column: user_id}
expect_column_values_to_be_in_set: {column: currency, value_set: [USD,EUR,TRY,UAH]}

7) Фінансова та операційна цілісність

Double-entry (подвійний запис): дебет/кредит у балансі; зведені звірки в cut-off.
Підсумкові інваріанти: сума виплат = сума списань + комісії + коригування.
Операційні інваріанти: SLA/guardrail-метрики не ламають бізнес-правила (наприклад, авто-ремонт не створює дублікатів).


8) Лінеедж, аудит і відтворюваність

Лінідж: від джерела до вітрин/фіч; видимість трансформацій і власників.
Аудит-трейли: хто змінив, що, коли і навіщо; версії схем/формул/джобів.
Снепшоти/контрольні точки: можливість перерахувати і підтвердити минулі звіти.
Repro: однаковий запит на однаковому зрізі → однаковий результат (версії і шари).


9) Безпека і приватність без втрати цілісності

RLS/CLS: фільтри рядків/колонок не повинні порушувати інваріанти (наприклад, сума за видимою вибіркою повинна збігатися із заявленою).
Маскування/токенізація: детерміновані стратегії, щоб дедуп і референціальна цілісність зберігалися.
Шифрування: в каналі і «на диску» після стиснення; управління ключами та аудит доступів.
DSAR/Retention: видалення/анонімізація не ламають зв'язність (каскадна політика).


10) Самообслуговування та автоматика ремонту

Quarantine: ізоляція підозрілих партій/батчів; споживачам - «чиста» гілка.
Replay/Backfill: перегравання вікна з незмінного raw-журналу.
Reconcile: звірки шарів і систем (raw↔curated↔marts; istochnik↔DWH).
Dedup/Compaction/Rebuild: системні процедури ремонту індексів/агрегатів.
Policy-as-code: «яка аномалія → яка дія → пороги → ескалація».


11) Практики моделювання та зберігання

Стабільні ключі: сурогатні PK (UUID/ULID), незмінні натуральні ключі в довідниках.
Normalizatsiya↔denormalizatsiya: FK-зв'язку в джерелах, денормалізовані вітрини з контролем версії логіки.
SCD1/SCD2: керована історія для вимірювань.
Сортування/кластеризація: покращує RLE/zone-maps і спрощує звірки.
Хеші та контрольні суми: перевірка цілісності файлів/партій.


12) Цілісність у часі та у звітності

Версії формул: звіт за січень 2025 повинен бути відтворюємо формулою версії X.
Cut-off і «закриття періоду»: заморожування вітрин і архівних зрізів.
Late arriving facts: механіка дозаливки та перерахунків з відміткою версії звіту.
Документування перевизначень: ручні коригування - тільки з аудитом.


13) Інтеграції та API

Контракт API: схеми, типи, обов'язкові поля, коди помилок; версіонування (v1/v2).
Валідація на вході: reject погані payload'и, не «лагодити мовчки».
Ідемпотентні POST: ключ ідемпотентності, повтор безпечний.
Експорт у файли: узгодженість партій, хеші, підпису.


14) Антипатерни

SELECT в прод-запитах і в'юхах - ламається при MINOR-еволюції.
FK «на словах»: відсутність реальної перевірки посилань.
Мовчазні виправлення даних без аудиту та звітності.
Змішування TZ і форматів часу в одному наборі.
Перевизначення KPI «ручками» без версій і журналів.
Єдиний ключ дедуплікації без запасних стратегій.
Видалення по DSAR без каскадної перевірки зв'язків.


15) Дорожня карта впровадження

1. Inventory & критичність: карта наборів/подій, власники, ризики, інваріанти.
2. Контракти та схеми: формалізувати типи/обмеження/FK, CI-перевірки сумісності.
3. DQ в пайплайні: Freshness/Completeness/Uniqueness/RI, quarantine, алерты.
4. Транзакційна основа: atomic-sink, upsert/merge, SCD-історія, версійність формул.
5. Лінеедж і аудит: каталог, трасування, change-logs, access-logs.
6. Політики ремонту: replay/backfill/dedup/reconcile як код; runbook’и и SLO MTTR-data.
7. Безпека/priv: RLS/CLS, маскування, шифрування, DSAR-процеси.
8. Звітність: cut-off, freeze-зрізи, управління версіями KPI.


16) Чек-лист перед релізом набору/вітрини

  • PK/FK і доменні обмеження задані і проходять тести.
  • Версіонування схем/формул включено; schema-diff зелений.
  • DQ-правила (свіжість/повнота/унікальність/діапазони/RI) зелені.
  • Ідемпотентні записи: upsert/merge, ключ ідемпотентності (для подій).
  • Час: `event_time` и `ingested_at`, TZ=UTC; політика late data.
  • Лінеедж і аудит видно; включені quarantine і алерти.
  • RLS/CLS/маскування не порушують інваріанти і RI.
  • DSAR/Retention протестовані; cut-off/архів готовий.

17) Міні-шаблони

SQL: перевірка посилальної цілісності

sql select count() as orphans from fact_payments f left join dim_users u on f.user_id = u.user_id where u.user_id is null;
-- ожидаем orphans = 0

Політика quarantine/repair (псевдо-YAML)

yaml policy: payments_integrity detect:
- rule: duplicates(txn_id) > 0
- rule: ref_integrity(user_id, users.user_id) = false auto_actions:
- quarantine_partition: {date: today}
- trigger_replay: {window: "last_2h"}
escalate_if:
- condition: violations_persist>30m page: "oncall-data"

Схема SCD2 для вимірювання

sql
-- dim_user_status (SCD2)
user_id, status, valid_from, valid_to, is_current

18) Підсумок

Цілісність даних - це не одинична перевірка, а наскрізна система гарантій: формальні контракти і обмеження, транзакційні і розподілені інваріанти, валідація і автоматика ремонту, лінеедж і аудит, приватність і права. Коли ці елементи працюють разом, дані стають надійною підставою для рішень, а інциденти - рідкісними, короткими і передбачуваними.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.