數據完整性
1)什麼是數據完整性
數據完整性是一組屬性和控制,可確保數據在整個生命周期中正確、一致且一致:從源和轉換到店面、API和導出。目的是使相同的陳述在重復時給出相同的答案,並且可以跟蹤和驗證任何更改。
2)完整性類型和居住地
實體(Entity):唯一的主鍵,沒有重復。
參考(Referential):正確的FK鏈接;沒有「掛起」鏈接。
域:有效的範圍和格式(類型、長度、參考資料)。
業務規則:主題區域不變量(平衡≥ 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)事務性保修和隔離性
用於OLTP的ACID:原子性,一致性,絕緣性,耐用性。
隔離級別:Read Committed/Repeatable Read/Serializable-選擇「骯臟「/不可思議/幻影閱讀的風險。
OLAP和lakehouse:具有兼容性控制的原子表commites(交易日誌)、idempotent sink和schema-evolution。
KPI公式的一致性:語義層→報告和API的一個真理。
5)分布式系統: 順序,重復,冪等
事件順序:使用「event_time」+「ingested_at」,watermarks和lateness公差;基於事件時間的聚合。
重新交付(at-least-once):全局「event_id」,表格idempotency keys, upsert/merge on可持續密鑰。
訂單: 重新計算窗口,延遲策略,補償.
Exactly-once的含義是:運輸可能只是least-once,接收器是相等的。
6)每個層上的完整性驗證(DQ)
我們在CI/CD和piplines rantime中包含完整性規則:- Freshness/Completeness/Uniqueness/Valid Values/Referential Integrity.
- 異常:重復激增,時間中斷,分布急劇變化。
- KPI公式的控制:計算的忠實性和結果匹配測試(金集)。
- 出口管制:禁止發放違規工具包(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)財務和運營誠信
雙入賬(雙入賬):資產負債表借記/信用;截斷中的摘要對賬。
總不變量:付款金額=註銷金額+傭金+調整數。
操作不變式:SLA/guardrail度量不會打破業務規則(例如,自動維修不會創建重復數據)。
8)Lyneedge,審核和可重復性
線條:從源頭到店面/相框;轉型和業主的可見性。
審計步道:誰改變了什麼,何時以及為什麼;電路/公式/jobs版本。
Snepshots/檢查點:能夠重新計算和確認過去的報告。
Repro:相同切片上的相同請求→相同的結果(版本和圖層)。
9)安全性和隱私而不會失去完整性
RLS/CLS:字符串/專欄過濾器不應違反不變量(例如,可見樣本的總和必須與聲明的總和匹配)。
掩蔽/令牌化:確定性策略,以保持假想和參考完整性。
加密:在信道中,壓縮後在「磁盤上」;密鑰管理和訪問審核。
DSAR/Retention:刪除/匿名不會中斷連通性(級聯策略)。
10)自助服務和自動維修
Quarantine:隔離可疑的政黨/戰役;消費者是「幹凈」的分支。
Replay/Backfill:從未更改的raw日誌重播窗口。
Reconcile:層和系統的對賬(raw↔curated↔marts;istochnik↔DWH)。
Dedup/Compaction/Rebuild:索引/單元修復的系統過程。
策略即代碼: 「什麼異常→什麼動作→閾值→升級。」
11)建模和存儲實踐
穩定鍵:代替PK(UUID/ULID),參考書中的不變自然鍵。
Normalizatsiya↔denormalizatsiya:源中的FK鏈接,帶有邏輯版本控制的非規範化店面。
SCD1/SCD2:用於測量的托管歷史。
排序/聚類:改進RLE/zone-maps,簡化對賬。
哈希和校驗和:檢查文件/批次的完整性。
12)時間和報告的完整性
公式版本:2025年1月的報告應復制公式 X。
切斷和「關閉期」:凍結店面和存檔切片。
後期修飾事實:給藥和重新計算機制與報告的版本標記。
記錄重新定義:手動調整-僅進行審核。
13)集成和API
API合同:模式,類型,強制性字段,錯誤代碼;(v1/v2)。
入口處的驗證:reject不好的薪水,不要「默默地修補」。
等效開機自檢: 等效鑰匙,重復是安全的.
導出到文件:批次、哈希、簽名的一致性。
14)反模式
Prod Questions和Vewhs中的SELECT-在MINOR演化中破裂。
FK「言語」:沒有真正的鏈接驗證。
無審計和報告的無聲數據修復。
將TZ和時間格式混合在一個集合中。
將KPI重新定義為沒有版本和日誌的「手柄」。
唯一沒有冗余策略的重復數據消除密鑰。
在DSAR上刪除而不進行級聯鏈接檢查。
15)實施路線圖
1.概況與關鍵性:集合/事件映射,所有者,風險,不變性。
2.合同和方案:正式化類型/限制/FK, CI兼容性檢查。
3.管道中的DQ:Freshness/Completeness/Uniqueness/RI,quarantine,Alertes。
4.交易基礎:atomic-sink,upsert/merge,SCD歷史,公式忠誠度。
5.在線和審核:目錄,跟蹤,更改日誌,訪問日誌。
6.維修策略: replay/backfill/dedup/reconcile作為代碼;runbook’и и SLO MTTR-data.
7.安全/priv: RLS/CLS、掩碼、加密、DSAR流程。
8.報告:切斷,自由切片,KPI版本控制。
16)套裝/店面發布前的支票清單
- PK/FK和域限制設置並通過測試。
- 包括電路/公式的轉換;schema-diff綠色。
- DQ規則(新鮮/完整/唯一性/範圍/RI)為綠色。
- 等效記錄:upsert/merge,等效鍵(用於事件)。
- 時間:「event_time」和「ingested_at」,TZ=UTC;數據延遲策略。
- Lyneedge和審計是可見的;包括quarantine和alertes。
- RLS/CLS/掩碼不會違反不變量和 RI。
- DSAR/Retention測試;切斷/存檔就緒。
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/修復政策(偽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)結果
數據完整性不是單個驗證,而是端到端的保證系統:正式合同和限制,事務和分布式不變式,維修驗證和自動化,在線和審計,隱私和權利。當這些元素一起工作時,數據成為決策的可靠基礎,事件是罕見的,短暫的和可預測的。