데이터 검증
1) iGaming 플랫폼에 필요한 이유는 무엇입니까?
보고서 및 KPI: GGR/NET, 변환, 보존, RG 신호.
ML/스코어링 신뢰성: 사기 방지/권장 사항/RG에 대한 올바른 기능.
실시간 작업: 지불/UX가 영향을 받기 전에 이벤트의 드리프트/손실에 대한 경고.
준수: PII/비밀이 없어야합니다. 입증 가능한 추적 성.
2) 검증 장소: 제어 수준
1. 주입 (배치/스트림): 계획, 유형, 필요한 필드, demotency/dedup.
2. 스트림 처리: 창/워터 마크, 주문, 누락/지연, 정확히 한 번.
3. ETL/ELT 및 변형: 링크/기쁨, 집계, 비즈니스 잔액.
4. DWH/상점 (골드): 테이블 간의 일관성, 신선도, 키의 독창성.
5. 피처 스토어/온라인: 피처 범위, 오프레인 온라인 일관성.
6. BI/API: 카운트 및 필터, 대기 시간/신선도에 대한 SLA, k 익명 성.
3) 수표 유형 (카탈로그)
Schematic: 유형/nullable/enum/regex/JSON 모양; 중지하기 위해 호환되지 않는 변경 사항 →.
도메인:- 아이덴티티/키: 기본 키는 고유하고 외부 키는 "매달려 있지 않습니다".
- 현장 품질: 충만, 길이, 형식 (IBAN, BIN, 전자 메일 토큰).
- 통계/기준선: 주파수, 분포, 양자 복도.
- 변칙성: 볼륨/분수 스파이크, 0/복제, 스키마 드리프트.
- 신선도: 최대 (ts) X보다 오래되지 않음; 지연 섭취 → 금
- 일관성: 부품의 합 = 요약; 다중 테이블 조정.
- 개인 정보 보호/보안: 허용 영역 외부의 제로 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
'MAJOR' 브레이크, 'MINOR' 은 필드를 추가하고 'PATCH' 는 설명을 수정합니다.
5) 기대와 정책
기대-파이프 라인 (배치/스트림) 에서 실행되는 선언적 점검.
기대의 예 (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"
응답 정책:
- '오류' → 파티/배치 검역, 경고 + 티켓; 다운 스트림 블록.
- 'varn' → 통과하지만 파싱 작업을 생성합니다. 품질 표시.
- 'info' → 모니터링 만.
6) 스트리밍: 수표 세부 사항
워터 마크/레이트 데이터: 그렇지 않으면 검역소; 유한 창으로 보상하십시오.
이념성: 이벤트 키 + 해시 페이로드 → 브로커/스레드의 교착 상태.
정확히 한 번: 중요한 흐름 (지불/라운드) 에 대한 거래 노래 (+ dempotent 싱크).
볼륨 카운터: 창당 "예상" 대 "수신"; 불일치 → 경고.
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;
창 일치: 매일 '세부 사항 → 요약' 조정, 불일치 보고서, 자동 티켓.
8) 개인 정보 보호 및 보안
기본 PII 버전: 입력 마스크/토큰; 로그에서 "원시" 전자 메일/카드/전화를 금지합니다.
권한 정책: PII-별도의 계층/디렉토리, 역할 별 액세스 (RBAC/ABAC) 테이블.
보고서의 K 익명 성: 슬라이스의 최소 N 행.
누출 탐지기: PII 패턴, "비밀" (키/토큰) 을 정기적으로 확인합니다.
관할권: 지리/임차인 격리 (국가/브랜드/라이센스), 별도의 키.
9) 품질 및 SLO 지표
품질 측정 (D):- 신선도-지연 최대 (ts).
- 완전성-비어 있지 않은/예상 레코드의 비율.
- 독창성-중복 키.
- 일관성-불변 및 균형 (테이블 간).
- 정확성-외부 도메인 소스/규칙을 사용한 검증.
- 유효성-일치/enum/regex 유형.
- 'Freshness payming _ gold
- '완전한 게임 _ 라운드 7 %/일 '.
- (PHP 3 = 3.0.6, PHP 4) 1‰`.
- 'PII _ leak = 0'.
10) 경고, 티켓 및 런북
라우팅: Slack/PagerDuty → 도메인 소유자; 샘플과 diff를 자동으로 적용하십시오
그룹화: 세트 당 하나의 사건 "레이블: 데이터 세트 = 결제, 브랜드 = TR".
런북 (예: "신선도 위반: payment _ gold"):1. 가장 많은 로그 및 브로커 대기열을 확인하십시오
2. PSP의 "예상 대 수신" 을 비교하십시오.
3. Retrai/Switch PSP 경로 사용하기
4. 주석 원인; 등을 다시 시작합니다. 사후.
11) 수정, 테스트 및 면제 프로세스
품질 규칙의 반복: 'quality @ MAJOR. 미노르. PATCH '.
변환의 단위 테스트 (SQL/DBT/python) 및 소스에 대한 계약 테스트.
GOLDEN 세트: 알려진 불일치/누출 사례는 회귀에 필수적입니다.
면제: 규칙 위반에 대한 단기 허가 (설명, 소유자, 용어, 보상 조치).
12) 카탈로그/아티팩트 (기성품 템플릿)
12. 데이터 세트 여권 1 개
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 기대
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 보고서로 조정; 누락 된 상태 → 부치 검역; 성장 감소 _ rate '에 대한 경고.
게임 제공 업체: 공급자 A의 공급자 → 변환 블록, 상태 배너에서 'round _ per _ min' vs 기준선 + 스키마 드리프트를 떨어 뜨립니다.
RG/AML: 필수 필드 (한계, 자체 제외, KYC 상태); 결제 블록에 기한이 지난 KYC → 플래그, 준수 티켓.
마케팅/CRM: 캠페인 매개 변수, UTM, 이벤트 결제의 유효성; 상점의 k 익명 성.
14) 구현 로드맵
0-30 일 (MVP)
1. 결제, 게임 _ 라운드, 사용자, 기능 등 주요 세트에 대한 계약을 포함합니다.
2. 기대 카탈로그 (10-15 기본) + 검역 + 경고.
3. 대시 보드 Freshness/Completeness/Uniqueness; 사건 보고서.
4. Runbook '겠습니다.' Freshness ',' Duplications ',' Schema drift '.
30-90 일
1. 상호 화해 및 균형; 면제 프로세스 및 준결승 규칙.
2. 스트림 유효성 검사 (늦은 데이터, 교착 상태, 워터 마크); PII 검출기.
3. CI/CD와의 통합: 소스 및 변환의 계약 테스트.
4. 도메인 명령 OKR의 품질 SLO.
3-6 개월
1. AIOps 임계 값 힌트; 원인의 자동 국소화.
2. 브랜드 간/지리적 품질 정책 및 규정 준수 보고서.
3. 사후 사건 P1 사건 → 황금 세트 및 규칙의 보충.
4. 흐름 경보 및 이상 분석 (단일 루프) 과의 연계.
15) RACI
데이터 거버넌스 (A/R): 표준, 계약, 규칙 감사.
도메인 소유자 (R): 도메인 기대 및 불변.
데이터 플랫폼 (R): 기대 프레임 워크, 검역, 경고, 모니터링.
보안/DPO (A/R): 개인 정보 보호/PII/k 익명 성, 지리/테넌트 격리.
SRE/관찰 가능성 (C): 사고 라우팅, SLO/SLI.
제품/금융 (C): 비즈니스 균형, 사건 우선 순위.
16) 반 패턴
"DWH에서만" 검증-늦고 비싸고 고통 스럽습니다.
검역이 없습니다-" 흙 "은 금/ML로 가서 신뢰를 깨뜨립니다.
계절/시간/시장이없는 하드 임계 값 → 경고 폭풍.
소유자 및 준결승 규칙 부족 → 예외의 혼란.
PII 및 "공통 채널에 대한 스크린 샷" 이 포함 된 로그.
영구 회로 대신 일회성 "위생의 날".
17) 관련 섹션
DataOps 연습, 데이터 감사 및 검증, 데이터 원점 및 경로, 데이터 스트림 경고, 이상 및 상관 분석, 액세스 제어, 데이터 보안 및 암호화, 데이터 보존 정책, MLops: 모델 탐색.
합계
검증은 마지막에 필터가 아니라 주입 및 스트림에서 상점 및 온라인 기능에 이르기까지 엔드 투 엔드 품질 계약입니다. 명확한 기대, 검역소, 경고 및 SLO는 데이터를 신뢰할 수있는 자산으로 전환합니다. 보고서가 정확하고 모델이 안정적이며 지불이 안전하며 규정 준수가 진정됩니다.