數據驗證
1)為什麼需要iGaming平臺
對報告和KPI的信任:GGR/NET,轉換,保留,RG信號。
ML/評分可靠性:正確的Fici for antifrod/推薦/RG。
實時操作:在付款/UX受到影響之前發生漂移/事件丟失時的異常值。
合規性:不應該有PII/秘密的地方;可證明的跟蹤性。
2)在哪裏驗證: 控制級別
1.無花果(batch/stream):圖形、類型、必填字段、idempotency/dedup。
2.流處理: 窗口/水印,順序,通過/遲到,exactly-once.
3.ETL/ELT和轉型:鏈接/joynes,聚合,業務資產負債表。
4.DWH/店面 (Gold):表格的一致性,新鮮度,鍵的唯一性。
5.Feature Store/Online:時尚範圍,offlayn↔onlayn一致性。
6.BI/API:計數和過濾器,SLA到latency/freshness,k匿名。
3)檢查類型(目錄)
電路:類型/nullable/enum/regex/JSON-shape;不兼容的更改→停止。
域名:≥0金額,貨幣∈ {EUR,USD,TRY,BRL},利率≤上限,strana∈litsenzii。
身份/密鑰:主鍵是唯一的,外鍵不是「掛起」。
字段質量:占用度、長度、格式(IBAN、BIN、電子郵件令牌)。
統計/基線:頻率,分布,量子走廊。
異常:劇烈的體積/分量跳躍,零值/復制,計劃漂移。
新鮮:max(ts)不大於X;Lag ingest→gold ≤ T。
一致性: 零件總和=總和;multi-table reconciliation.
隱私/安全:允許區域外的零PII;令牌/口罩。
調節:RG/AML字段存在且可信(日期、特征)。
4)數據合同(數據合同)
該合同記錄了來源和消費者之間的方案+質量規則+SLO。
最低合同(片段):yaml dataset: payments_ingest_v2 owner: team-payments schema:
id: {type: string, pattern: "^[a-f0-9]{32}$", unique: true}
ts: {type: timestamp, timezone: "UTC", nullable: false}
amount: {type: decimal(18,2), min: 0. 00}
currency: {type: string, enum: ["EUR","USD","TRY","BRL"]}
psp: {type: string, required: true}
quality:
freshness_max: "PT5M"
completeness_min: 0. 995 duplicate_rate_max: 0. 001 pii_allowed: false slo:
p95_ingest_latency_ms: 30000 success_rate: 0. 995
合同變更-通過semver和遷移:「MAJOR」打破,「MINOR」添加字段,「PATCH」更正描述。
5)「期望」(expectations)和政策
期望-在pipline(batch/stream)中執行的聲明性檢查。
期望示例(YAML):yaml expectations:
- name: unique_primary_key check: "unique(id)"
severity: "error"
- name: amount_non_negative check: "amount >= 0"
severity: "error"
- name: currency_enum check: "currency in ['EUR','USD','TRY','BRL']"
severity: "error"
- name: ts_fresh_enough check: "now() - max(ts) <= interval '5 minutes'"
severity: "warn"
- name: pii_absent check: "no_plain_pii(columns: ['email','card','iban'])"
severity: "error"
應對政策:
- 「error」 →批次/戰鬥檢疫,警報+tiket;downstream街區。
- 「warn」 →通過,但創建了解析任務;標記質量。
- 「info」 →僅監控。
6)流媒體: 檢查細節
Watermarks/late data:允許遲到「≤ 120s」,否則允許隔離;用末端窗戶補償。
Idempotency:事件密鑰+hash payload →經紀人/線程上的去勢。
Exactly once:用於關鍵流(付款/回合)的交易套餐(+等價套餐)。
音量計數器:每個窗口"預期"vs"獲得;差異→警報。
scala val deduped = stream
.keyBy(_.id)
.process(new DeduplicateWithin(Time. minutes(10)))
val validated = deduped
.filter(_.amount >= 0)
.filter(_.currency in Set("EUR","USD","TRY","BRL"))
emitToQuarantineIfLate(validated, allowedLateness = 120. seconds)
7) DWH/SQL: 不變性和對賬
SQL檢查(示例):sql
-- uniqueness
SELECT id, COUNT() c FROM gold. payments GROUP BY 1 HAVING c>1;
-- freshness
SELECT NOW() - MAX(ts) AS lag FROM gold. payments;
-- reconciliation of totals
SELECT
SUM(amount) AS by_rows,
(SELECT total_amount FROM gold. payments_summary WHERE date=CURRENT_DATE) AS by_summary
FROM gold. payments
WHERE date = CURRENT_DATE;
與店面對決:每日「detail → summary」對決,差異報告,自動滴答作響。
8)隱私和安全
默認的PII修訂版:入口口罩/令牌;禁止在登錄中使用「原始」電子郵件/卡/電話。
權限策略:帶有PII的表是單獨的層/目錄,按角色訪問(RBAC/ABAC)。
報告的K匿名:切片中的最小N行。
泄漏探測器:定期檢查PII模式,「秘密」(鑰匙/代幣)。
司法管轄區:geo/tenant隔離(國家/品牌/許可證),分配密鑰。
9)質量指標和SLO
質量測量(D):- Freshness-max (ts)積壓。
- Completeness-未公布/預期記錄的比例。
- Uniqueness是密鑰的副本。
- Consistency是不變量和平衡量(跨系)。
- Accuracy-使用外部域源/規則進行驗證。
- Validity-符合/enum/regex類型。
- `Freshness payments_gold ≤ 5 мин` (p95).
- `Completeness game_rounds ≥ 99.7%/天。
- `Duplicate_rate ≤ 0.1‰`.
- `PII_leak = 0`.
10)Alerta,tikets和runbook
漫遊:Slack/PagerDuty →域所有者;我們自動應用樣本和diff。
分組:每組事件「labels: dataset=payments, brand=TR」。
1.檢查ingest lag和經紀人隊列。
2.比較PSP的「預期vs」。
3.啟用retrai/切換 PSP路線。
4.註釋原因;重啟備份;做一個後面的mortem。
11)轉化,測試和等待過程
Semver質量規則: 'quality@MAJOR.MINOR.PATCH`.
轉換統一測試(SQL/DBT/payton)和源合同測試。
GOLDEN套件:已知的差異/泄漏案例-強制性追索。
Waiver(例外):短期許可違反規則(說明、所有者、補償措施期限)。
12)目錄/工件(完成模板)
12.1 Dataset護照
yaml dataset: gold. game_rounds owner: team-games steward: data-governance contracts: ["games_rounds_v3"]
quality_slo:
freshness_p95: "PT10M"
completeness_min: 0. 997 uniqueness_max_dup: 0. 0005 alerts:
channels: ["#dq-incidents","#games-ops"]
severity_map: {error: "P1", warn: "P2"}
12.2檢疫政策
yaml quarantine:
storage: "s3://quarantine/payments/"
retention: "P30D"
access: ["team-payments","data-governance"]
auto_reprocess:
cron: "/15 "
max_attempts: 3
12.3 Expectation для Feature Store
yaml featureset: fs_payments_online_v1 checks:
- name: feature_freshness check: "now() - max(feature_ts) <= interval '60 seconds'"
severity: "error"
- name: range_amount_avg check: "amount_avg in [0, 2000]"
severity: "warn"
- name: enum_device check: "device in ['ios','android','web']"
severity: "error"
13) iGaming的細節: 現成的案例
付款/PSP:將存款/結算金額與PSP報告進行核對;缺失狀態→ batch檢疫;「decline_rate」生長的同位素。
遊戲提供商:從提供商處掉落'rounds_per_min's baseline+schema drift →提供商A的轉換單元,狀態橫幅。
RG/AML:強制性字段(限制,自釋放,KYC狀態);逾期的KYC →一面旗幟到付款單位,滴答作響。
營銷/CRM:活動參數的有效性,UTM,事件演變;店面中的k匿名。
14)實施路線圖
0-30天(MVP)
1.包括關鍵套件的合同:付款、game_rounds、用戶、功能。
2.期望目錄(10-15基本)+檢疫+Alerta。
3.Dashbord Freshness/Completeness/Uniqueness;事件報告。
4.Runbook’и для `Freshness`, `Duplicates`, `Schema drift`.
30-90天
1.校際對賬和資產負債表;waiver進程和semver規則。
2.流驗證(深度數據,深度,水上市場);PII檢測器。
3.與CI/CD的集成:源和轉換的合同測試。
4.OKR域命令中的SLO質量。
3-6個月
1.AIOps閾值提示;原因的自動本地化。
2.跨品牌/地質質量政策和合規報告。
3.P1事件後的面部照片→金盤和規則的補充。
4.與流隔離和異常分析(單個輪廓)的捆綁。
15) RACI
數據管理(A/R):標準,合同,規則審核。
域所有者(R):域期望和不變量。
Data Platform (R):期望框架、檢疫、異常、監控。
Security/DPO (A/R): 隱私/PII/k-匿名, geo/tenant隔離。
SRE/觀察力(C):事件路由,SLO/SLI。
產品/財務(C):業務資產負債表、事件優先級。
16)反模式
「僅限於DWH」的驗證遲到,昂貴,痛苦。
沒有檢疫-「汙垢」進入黃金/ML並打破信任。
沒有季節性/時鐘/市場的硬門檻→過度的風暴。
缺乏業主和semver規則→例外混亂。
帶有PII和「屏幕截圖到共享通道」的日誌。
一次性的「衛生日」代替永久輪廓。
17)相關部分
DataOps實踐,數據審核和驗證,數據的來源和路徑,數據流的Alerta,異常和相關性分析,訪問控制,數據安全和加密,存儲策略,MLOps:模型操作。
底線
驗證不是端面的過濾器,而是端到端的質量合同:從噴墨和溪流到店面和在線照片。清晰的預期,隔離,Alerta和SLO將數據轉化為可靠的資產:報告正確,模型穩定,付款安全,合規性穩定。