ETL/ELT 프로세스
1) 목적과 맥락
ETL/ELT 파이프 라인은보고를위한 데이터의 예측 가능한 로딩, 변환 및 게시 (GGR/NGR, 규제 기관), 분석/ML 및 운영 패널을 제공합니다.
ETL: DWH/Lakehouse로로드하기 전에 변환합니다 (현대 스택에서는 덜 자주).
ELT: 먼저 Lakehouse (Bronze/Silver) 에로드 한 다음 SQL/엔진 (권장) 을 변환하십시오.
2) 참조 아키텍처
1. Ingest/Edge: OLTP의 CDC, TP/gRPC/Batch, 공급자가 S3/FTP를 업로드합니다.
2. 청동 (원시, 추가 전용): 불변의 페이로드, 날짜/시장/테넌트 별 당사자.
3. 은 (깨끗함/준수): 정규화, 디드 업, 디렉토리, SCD, FX/시스템.
4. 금 (서브): BI/레귤레이터/모델에 대한 비정규화 된 상점.
5. 오케스트레이션: 기류/Dagster/Prefect (DAG 'i, SLA, Retrai, Shifts).
6. DQ/계약: 스키마 레지스트리 + DQ-ка리스트로, 소비자 중심 테스트.
7. 관찰 가능성: 파이프 라인 지표, 계보, 로그, 비용 대시 보드.
3) ETL vs ELT 선택
연습: iGaming-ELT + CDC: 빠르게로드 한 다음 표준화하고 계산하십시오.
4) 증가와 CDC
델타 접근 방식:- CDC (데베 지움/로그 복제): OLTP 변경 → 은색에서 청동 → MERGE.
- 시간별 워터 마크: '업데이트 된 _ at> max _ loaded _ ts'.
- 해시 디프: 변경 감지를위한 'md5 (row)' 비교.
- Upsert/MERGE: 다운로드의 불확실성.
sql
MERGE INTO silver. payments s
USING stage. payments_delta d
ON s. transaction_id = d. transaction_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
5) 계약 및 계획
스키마 우선: JSON/Avro/ProtoCali in Registry; 이벤트/파일에서 '스키마 _ 버전'.
진화: 역 호환 (무효화 추가); 파손- '/v2 '+ 이중 항목.
필요한 필드는 '이벤트 _ time (UTC)', '이벤트 _ id', 'trace _ id', 'user _ pseudo _ id', 'market' 입니다.
6) 코드 DQ (최소 세트)
yaml table: silver. payments owner: data-payments slo:
freshness_minutes: 15 completeness_percent: 99. 5 rules:
- name: unique_tx # uniqueness of transactions type: unique columns: [transaction_id]
severity: critical
- name: currency_whitelist type: in_set column: currency set: [EUR,USD,GBP,TRY,BRL]
severity: major
- name: amount_positive type: range column: amount_base min: 0. 01 severity: critical
- name: fk_user type: foreign_key column: user_pseudo_id ref_table: dim. users_scd severity: critical
7) 오케스트레이션: DAG '및, 의존성, SLA
DAG 설계: 소스에서 상점까지; 작업 간의 명시적인 종속성.
Retrai 및 demempotence: 백오프, "깨끗한" 리플레이, 체크 포인트.
캐치 업: 놓친 기간의 깔끔한 캐치.
SLA: 예를 들어 금. 현지 시간으로 06:00 이전에 매일 준비됩니다. 위반에 대한 경고.
구급차: 바를 통한 시장/세입자/날짜; 단일 작업 템플릿.
8) 이념과 정확히 한 번
섭취: 복제본은 '(이벤트 _ id, 소스)' 로 가능합니다.
처리 중: upsert/merge; "순수한" 변환 기능.
싱크대에서: 거래 커밋 또는 dempotent 쓰기; "이중 계산" 의 제어.
전송/받은 편지함: OLTP의 도메인 이벤트 거래 게시.
9) 백필 알림 재 처리
백필: 기본 충전/역사적 범위.
재 처리 - 논리 변경/수정시 재 계산.
가드 레일: 범위 제한, 할당량, 시간 창, 미터법 비교를 통한 드라이 런.
마킹: 'logic _ version', 'reprocessed _ at', 'recalc _ reason'.
10) 은/금 모델링
실버 (3NF/BCNF): 사실 'fact _ bets/payment/payouts', 치수 'dim _ users/games/providers/markets (SCD II)', 통화 표준화/가이드 라인.
금: BI/레귤레이터/모델에 대한 비정규화 된 상점; 불변의 내보내기 패키지 (WORM) + 서명.
골드 예: GGR Daily
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
b. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;
11) 개인 정보 보호 및 거주
PII 최소화: 토큰 화; 분리 된 루프에서 실제 ID의 매핑.
RLS/CLS: 역할/관할권 별 액세스 정책, 마스킹.
거주지: EEA/UK/BR을위한 별도의 디렉토리/키; 이유없이 지역 간 가입 금지.
DSAR/RTBF 및 Legal Hold: 선택적 편집, 보고를위한 WORM 아카이브, 수출 감사.
12) 관찰 및 SLO
SLI/SLO 벤치 마크:- 신선도 실버 p95 체 15 분; 금은 06:00 자물쇠까지 준비됩니다. 시간.
- 완전성 이하 99. 5%, 유효성 (체계) 9%.
- 직업의 성공은 99 이상입니다. 0%, MTTR 사건은 24-48 시간입니다.
대시 보드: 신선도 히트 맵, DQ 손실 깔때기, 비용/쿼리 및 비용/GB, 계보 그래프.
13) 성능 및 비용
파티셔닝: 날짜/시장/테넌트; 필터 별 클러스터링/Z 주문.
형식: Parquet + ACID (Delta/Iceberg/Hudi), 압축 및 통계.
압축: 작은 파일과 싸우기 (OPTIMIZE/VACUUM).
재료화: 안정적인 골재; 거대한 온-투-플라이 합류를 피하십시오.
충전: 예산, 재생 할당량/백필; 낮은 부하 창에서 예약.
14) 일반적인 DAG 작업의 예 (기류 유사 코드)
python with DAG("elt_payments_daily", schedule="@daily", start_date=..., catchup=True) as dag:
extract = BashOperator(task_id="extract_cdc", bash_command="run_cdc_to_bronze. sh {{ ds }}")
load = BashOperator(task_id="load_to_silver", bash_command="sql/run_merge_silver. sql {{ ds }}")
dq = BashOperator(task_id="dq_checks", bash_command="dq/run_checks. sh silver. payments {{ ds }}")
gold = BashOperator(task_id="build_gold_ggr", bash_command="sql/build_gold_ggr. sql {{ ds }}")
export = BashOperator(task_id="export_regulator", bash_command="export/run_worm_pack. sh {{ ds }}")
extract >> load >> dq >> gold >> export
15) 프로세스 및 RACI
R (책임): 데이터 엔지니어링 (DAG, 은/금 모델), 데이터 플랫폼 (인프라, 레지스트리, DQ).
A (책임): 데이터/CDO 책임자.
C (컨설팅): 규정 준수/법률/DPO (PII/거주/법률 보유), 금융 (FX/GGR), 위험 (RG/AML), SRE (SLO/стои
I (정보): BI/제품/마케팅/운영.
16) 구현 로드맵
MVP (3-5 주):1. Lakehouse Bronze/Silver (ACID) + 지불/게임 플레이에 대한 CDC/증분.
2. DQ와 유사한 코드 (10-15 규칙) 및 기본 신선도/완벽한 대시 보드.
3. SLA "06:00" 의 첫 번째 골드 쇼케이스 (GGR Daily), WORM 서명과 함께 내보냅니다.
4. SLA/DQ의 DAG 및 경고 오케스트레이션.
2 단계 (5-10 주):- 사용자/게임/공급자를위한 도메인 확장, SCD II.
- 시맨틱 메트릭 레이어; 계보/영향 분석; 백필/재 처리 절차.
- 지역화 (EEA/UK), RLS/CLS, 비용 관리 (할당량/지불).
- 쇼케이스/메트릭 문서의 자동 생성 시뮬레이터 (What-if).
- 비용 최적화 (클러스터링, 구체화, TTL, 압축).
- DR 운동 및 시간 여행 회복.
17) 사전 판매 점검표
- 레지스트리 계약/스키마, 호환성 테스트 녹색.
- CDC/증분 및 MERGE는 demmpotent입니다. 섭취를 포기하십시오.
- DQ 규칙이 활성화되어 있으며 (임계 → 실패 + DLQ) SLA 대시 보드가 구성됩니다.
- 골드 쇼케이스는 시맨틱 레이어의 미터법 공식으로 문서화되어 있습니다.
- RBAC/ABAC, 암호화, 거주자, DSAR/RTBF/Legal Hold 확인.
- 일정에 따른 압축/OPTIMIZE/VACUM; 백필/재생 제한.
- 런북 및 사고 및 재 처리, 감사 수출 (WORM + 해시).
18) 반 패턴 및 위험
"만약에 대비하여" 완전 재 장전: CDC/증분을 사용하십시오.
원시 및 보고 된 데이터 혼합: 청동/은/금을 분리하십시오.
DQ 및 계보 부족: 확률 및 재현성 없음.
분석 계층의 PII: 분리 매핑, CLS/RLS 적용.
Monolithic "night" jabs: 호감, 배치와 평행.
비용 무시: 작은 파일을 주시하고 집계를 구체화하며 할당량을 도입하십시오.
19) 용어집 (브리핑)
ETL/ELT-추출/변환/로딩 (로딩 전/후).
CDC-캡처 변경.
SCD-측정 기록 (I/II/III).
WORM-보고서 패키지를 변경할 수 없습니다.
시간 여행-과거 버전의 테이블 읽기.
20) 결론
최신 ETL/ELT는 스크립트가 아니라 계약 및 DQ, dememotent 증분/CDC, Bronze/Silver/Gold 계층 분야, 관찰 성 및 SLO, 개인 정보 보호 및 경제와 같은 관리 플랫폼입니다. 이 안내서를 따르면, 보고, 제품 및 모델에 지속적으로 전력을 공급하고 놀라지 않고 재현 가능하고 감사 가능한 파이프 라인을 얻을 수 있습니다.