과거 데이터로 작업
1) 목적과 원칙
목적: 보고서, 모델 및 조사가 재현 가능하고 정확하며 준수 될 수 있도록 과거 상태를 저장하고 처리합니다.
원칙:- 스키마 및 쿼리의 설계 명시 적 시간 모델로 시간 인식.
- 재현성: 날짜 D에 대한 동일한 보고서는 항상 동일한 결과를 생성합니다.
- 감사: 계보, 불변의 층, 필요한 경우 WORM.
- 비용 인식: 아카이브 레이어, 압축, 이해할 수있는 SLA가있는 냉장 보관.
- 개인 정보 보호 설계: 소급 거래 및 법적 요청에 대한 PII 관리.
2) 시간 모델
이벤트 시간: 실제 이벤트 시간 (요금, 예금).
시스템이 레코드를 처리 한 처리 시간 (다를 수 있음)
Bitemporal: 소급 편집을 위해 이벤트 및 처리 시간을 모두 저장합니다.
유효성 간격: '유효한 _ from', '유효한 _ to', '는 _ current' 입니다.
쿼리: "T. 당시 알고있는대로" 데이터 샘플링
필드 템플릿:sql event_time TIMESTAMP, -- event time processed_at TIMESTAMP, -- TIMESTAMP valid_from processing time, -- start of version validity valid_to TIMESTAMP, -- end of validity (NULL if current)
is_current BOOLEAN
3) 스토리지 레이어 및 형식
레이크 하우스: 청동 (원시 추가 전용) → 은 (깨끗한/SCD/정규화) → 금 (쇼케이스).
ACID- 프로그램: Delta/Iceberg/Hudi (MERGE/Upsert, 시간 여행, 스냅 샷).
계층 형 스토리지: 규제 아티팩트를위한 핫/워밍/콜드 + WORM.
파티션: '이벤트 _ 날짜', '시장', '테넌트'; 빈번한 술어 (사용자/게임/제공자) 에 의한 클러스터링/Z 주문.
4) 측정 이력 (SCD)
SCD I: 중요하지 않은 편집을 위해 덮어 쓰기-.
SCD II: 전체 이야기; RG/KYC/트래픽 채널/게임 속성에 권장됩니다.
SCD III: "전/후" -드문 비교 사례.
sql
MERGE INTO dim. users_scd t
USING stage. users u
ON t. user_pseudo_id = u. user_pseudo_id AND t. is_current = TRUE
WHEN MATCHED AND (t. rg_status <> u. rg_status OR t. country <> u. country) THEN
UPDATE SET is_current = FALSE, valid_to = CURRENT_TIMESTAMP
WHEN NOT MATCHED THEN
INSERT (user_pseudo_id, country, rg_status, valid_from, valid_to, is_current)
VALUES (u. user_pseudo_id, u. country, u. rg_status, CURRENT_TIMESTAMP, NULL, TRUE);
5) 사실 이야기: 스냅 샷 및 비트 포멀
스냅 샷: 종료/월 집계 (예: 지갑 잔액) 의 스냅 샷-과거 보고서의 재생성 속도를 높입니다.
중요한 사실: 이벤트 시간 및 처리 시간을 수정하여 늦은 수정과 소급 계산을 구분하십시오.
정확히 한 번의 역사: '이벤트 _ id' + demempotent MERGE에 의한 결정.
6) 시간 여행 및 재현성
시간 여행: 디버깅, 사고, 조정을위한 "T 당시" 테이블 읽기.
논리 버전 지정: 출력 테이블의 변환 아티팩트 (SQL/DBT 버전, 컨테이너) 및 "logic _ version" 레이블.
냉동 출력: 금보고 아티팩트가 캡처되고 다시 작성되지 않으며 해시 및 내보내기 로그를 사용할 수 있습니다.
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';
7) 백필 (백필) 재 처리
백필: 기본/사전로드 과거 범위.
재 처리: 버그를 수정하거나 비즈니스 규칙을 변경 한 후 재 계산.
- 이데올로기 (MERGE/upsert), 범위, 할당량, 메트릭 비교를 통한 드라이 런.
- 결과 표시: 'recalc _ reason', 'logic _ version', 'reprocessed _ at'.
1. 전류 금 동결; 2) DLQ/DQ 검증; 3) 실버 런; 4) 지표 비교; 5) 금 재건; 6) 출판 및 서명.
8) 화해
체크 섬: 판매량/수량을 OLTP, PSP/공급자와 조정합니다.
루프 확인: 샘플의 독립적 인 파이프 라인 (A/B 비교).
(PHP 3 = 3.0.6, PHP 4) 하루에 2%.
sql
-- Duplicates
SELECT transaction_id, COUNT() c
FROM silver. payments
GROUP BY transaction_id
HAVING COUNT() > 1;
-- Unknown Currencies/Markets
SELECT p. currency
FROM silver. payments p
LEFT JOIN ref. currencies r ON r. code = p. currency
WHERE r. code IS NULL;
9) 통화, 시간, 일정: 역사적 정확성
이벤트 날짜의 FX: 'fx _ rate _ used' 및 'fx _ source' 를 수정하십시오.
현지 시장 시간: 캘린더 디렉토리를 통한 DST/시간대.
공휴일/계절: 모델 및 보고서에 사용되는 별도의 캘린더 테이블.
sql
SELECT p. transaction_id,
p. amount_orig,
r. rate AS fx_rate_used,
p. amount_orig r. rate AS amount_base,
r. fx_source
FROM bronze. payment_events p
JOIN dim. fx_rates r
ON r. date = DATE(p. event_time) AND r. ccy_from = p. currency AND r. ccy_to = 'EUR';
10) PII, 준수 및 법적 보유
PII 최소화: 가명, 별도의 보호 매핑.
DSAR/RTBF: 역사적 층의 계산 가능한 투영 및 선택적 편집; 법적 저장 예외가 문서화되어 있습니다.
법적 보류: 범위/객체의 플래그 "동결" 삭제, 보고 가능한 아티팩트의 경우 WORM.
감사: 불변의 액세스 및 내보내기 로그.
11) 역사를위한 DQ 및 계보
코드 DQ (예):yaml table: silver. fact_bets slo:
completeness_percent: 99. 5 freshness_minutes: 60 rules:
- name: unique_bet type: unique columns: [bet_id]
severity: critical
- name: market_known type: in_set column: market set_ref: ref. markets
- name: ts_in_range type: temporal expression: "event_time BETWEEN date_sub(now(), interval 5 year) AND now()"
계보: 입력/변환/출력 버전 수정; 개조에는 종속성 그래프가 필요합니다.
12) 성능 및 비용
분할: 날짜/시장/임차인; 자주 필터링하면 'user _ pseudo _ id '/' game _ id' 의 공격적인 클러스터링.
형식: Parquet + 통계/압축; 일반 VACUM/OPTIMIZE.
재료화: "고가의" 과거 집계에 대한 사전 계산; 분기 별/연간보고를위한 스냅 샷.
보관: 오래된 배치를 냉장 보관소로 변환 (복구를위한 SLA 문서화).
샘플링: 규제/금융이 아닌 연구 작업에만 해당됩니다.
13) ML의 역사적 특징
기능 레지스트리: 각 기능에는 공식, 소유자, SLO, '모델 _ 버전' 이 있습니다.
온라인/오프라인 일관성: 하나의 변환 코드베이스, 반복성 테스트.
특징적인 드리프트: 기간 별 PSI/KS, 과거 분포 저장.
14) 쿼리 패턴
현재: 보고서의 재현성.
코호트 분석: 등록/첫 번째 퇴적물, 롤링 윈도우의 코호트.
천천히 변화하는 사실: корректн가입 SCD II ('유효한 _ to,' 9999-12-31 ') 에서' 이벤트 _ BETWEEN 유효한 _ '이벤트.
sql
SELECT b. bet_id, u. rg_status
FROM silver. fact_bets b
JOIN dim. users_scd u
ON u. user_pseudo_id = b. user_pseudo_id
AND b. event_time >= u. valid_from
AND (u. valid_to IS NULL OR b. event_time < u. valid_to);
15) 프로세스 및 RACI
R (책임): 데이터 엔지니어링 (모델/SCD/백필), 데이터 플랫폼 (ACID/아카이브), 금융/준수 (조정/스토리지 요구 사항).
A (책임): 데이터/CDO 책임자.
C (컨설팅): 법률/DPO (DSAR/RTBF/법률 보유), SRE (비용/SLA), 건축.
I (정보): BI/제품/마케팅/운영.
16) 구현 로드맵
MVP (3-5 주):1. 시간 여행 (Delta/Iceberg/Hudi) 및 기본 파티션이있는 ACID 테이블.
2. 핵심 치수 (사용자/게임/공급자) 를위한 SCD II.
3. 중요한 집계의 일일 스냅 샷 (GGR Daily).
4. 코드로서의 DQ (고유성/in _ set/temporal) + 계보 그래프.
2 단계 (5-10 주):- API/SQL 템플릿과 같은 비트 포뮬러 사실은 런북을 백필/재 처리합니다.
- FX/캘린더/DST 농축, OLTP SL DWH/provaydery 조정.
- 콜드 스토리지 보관, 패키지보고를위한 WORM, Legal Hold.
- "재생 및 What-if" 의 완전한 자동화, 메트릭 및 회귀 경고 비교.
- 과거 기능 및 드리프트 제어 ML, 스토리지 비용에 대한 요금 부과.
- 문서 "현재" 메트릭 및 재현 가능한 보고서.
17) 사전 판매 점검표
- 테이블은 시간 여행을 지원합니다. VACUM/RETENTION 정책은 일관됩니다.
- SCD II는 중요한 측정을 위해 구현됩니다. 가입 테스트.
- D/M의 주요 장치 사진을 사용할 수 있으며 반짝임으로 확인합니다.
- DQ 규칙이 활성화되었습니다. 계보는 입력/출력 및 논리 버전을 표시합니다.
- DSAR/RTBF/Legal Hold는 과거 계층에서 테스트되었습니다.
- 냉장 보관 및 복구 문서화 및 검증.
- 비용/GB, 콜드 쉐어, 복구 SLA
18) 빈번한 실수와 피하는 방법
명시 적 시간 모델이 없습니다: 이벤트/처리/유효성 추가.
FX "소급 적": 항상 이벤트 당시 코스는 'fx _ source' 를 저장합니다.
SCD에 잘못된 조인이 있습니다: 'is _ current' 가 아닌 유효성 간격을 사용하십시오.
돌연변이 골드 쇼케이스: 보고 가능한 출력은 불변이되거나 다양해야합니다.
계보/DQ 없음: 확률 및 체크 포인트 없음-첫날부터 입력하십시오.
관리 할 수없는 비용: 핫 파티를 끄고 진공 청소기로 청소하고 추위로 전환하십시오.
19) 용어집
현재 쿼리-데이터 요청 "T. 시간을 보았을 때"
Bitemporal-이벤트 및 처리 시간의 동시 고정.
스냅 샷-기간이 끝날 때 상태/집계의 구체화 된 스냅 샷.
시간 여행-과거 버전의 테이블 읽기.
WORM-많은 것을 읽으면 쓰십시오.
20) 결론
과거 데이터를 사용하는 것은 "긴 스토리지" 일뿐만 아니라 명시 적 이벤트/처리/비트 포털, SCD 및 스냅 샷 모델, 재현 가능한 요청, 엄격한 조정 및 준수 제어, 관찰 가능성 및 비용 효율적인 스토리지 아키텍처. 이 안내서를 따르면 비즈니스 논리의 감사 및 변경에 탄력적 인보고, 분석 및 ML을위한 견고한 역사적 토대를 갖게됩니다.