数据验证
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将数据转化为可靠的资产:报告正确,模型稳定,付款安全,合规性稳定。