Деректер тұтастығы
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) Транзакциялық кепілдіктер және оқшаулану
ALTP үшін ACID: атомарлық, консистенттік, оқшаулау, ұзақ мерзімділік.
Оқшаулау деңгейлері: 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) кемшіліктері бар жиынтықтарды беруге тыйым салу.
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; DWH).
Dedup/Compaction/Rebuild: индекстерді/агрегаттарды жөндеудің жүйелік рәсімдері.
Policy-as-code: «қандай аномалия → қандай әрекет → табалдырық → эскалация».
11) Модельдеу және сақтау тәжірибелері
Тұрақты кілттер: суррогат PK (UUID/ULID), анықтамалықтардағы өзгермейтін табиғи кілттер.
Қалыпқа келтіру- лер: көздердегі FK-байланыстар, логика нұсқасын бақылаумен қалыпқа келтірілген витриналар.
SCD1/SCD2: өлшеу үшін басқарылатын тарих.
Сұрыптау/кластерлеу: RLE/zone-maps жақсартады және салыстыруды жеңілдетеді.
Хештер және бақылау сомалары: файлдардың/партиялардың тұтастығын тексеру.
12) Уақыттағы және есептіліктегі тұтастық
Формула нұсқалары: 2025 жылғы қаңтар есебі X нұсқасының формуласымен орындалуы керек.
Cut-off және «кезеңді жабу»: сөрелер мен мұрағаттық кесінділерді мұздату.
Late arriving facts: есептің нұсқасын белгілей отырып, мөлшерлеу және қайта есептеу механикасы.
Қайта анықтауды құжаттау: қолмен түзету - тек аудитпен.
13) Интеграция және API
API келісімшарты: схемалар, типтер, міндетті өрістер, қате кодтары; нұсқалау (v1/v2).
Кіре берістегі валидация: reject нашар payload's, «үнсіз жөндеуге» болмайды.
Іспеттес 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) Қорытынды
Деректердің тұтастығы - бұл жеке тексеру емес, кепілдіктердің толассыз жүйесі: формальды келісімшарттар мен шектеулер, транзакциялық және таратылған инварианттар, валидация және жөндеу автоматикасы, линеедж және аудит, құпиялылық және құқық. Бұл элементтер бірге жұмыс істегенде, деректер шешімдер үшін сенімді негіз болады, ал тосын оқиғалар - сирек, қысқа және болжамды.