GH GambleHub

데이터 파이프 라인 테스

1) 데이터 파이프 라인을 테스트하는 이유

데이터 파이프 라인 (가장 중요한 → 변환 → 서비스) 은보고, ML 및 운영 솔루션을위한 중요한 인프라입니다. 오류는 잘못된 지표, 사기 신호 및 금전적 손실로 바뀝니다. 테스트는 다음을 제공합

정확성과 탄력성.
예측 가능한 변화 (스키마/논리 진화).
신선도, 완전성, 대기 시간 측면에서 SLO를 준수합니다.
자동 검증으로 인한 빠른 릴리스 (릴리스 속도).

2) 데이터 테스트 피라미드

상단: 많은 빠른 로컬 테스트 → 적은 통합 → 약간의 엔드 투 엔드.

1. 변환의 단위 테스트 (기능, UDF, SQL보기, dbt 모델).
2. 데이터 품질 테스트 (신선도/완전성/고유성/범위 규칙).
3. 계약 및 체계 (스키마/계약 테스트, 진화).
4. 파이프 라인 통합 테스트 (DAG: 가장 많이 섭취 한 스토리지, 변환 된 마트).
5. 권리 (RLS/CLS) 및 수출을 포함한 E2E 테스트 (상점/API의 소스).
6. 로드/용량 (볼륨, 속도, 서비스 비용).
7. 데이터 혼돈 테스트 (지연, 중복, 고장, 사용 불가).

3) 테스트 유형: 정확히 확인하는 것

3. 1 단위 논리 테스트

순 변환 함수; 속성 기반 (불변: dempotency, monotony).
SQL/DBT: 결과와 표준 (골든 세트), 'SELECT' 금지를 비교하여 필터를 시간별로 확인하십시오.

3. 2 데이터 품질 테스트 (DQ)

신선도: 창 지연

완전성: 점유율의 예상 수량/백분율.
독창성: 중복되지 않은 키.
도메인 규칙: 범위, 참조 무결성, 비즈니스 불변량.
Anomalies: 특이 치, 중복 버스트, 시간 간격.

3. 3 계약 및 계획

호환성 변경 (SemVer: MAJOR/MINOR/PATCH).
필수 열, 유형, 제한 사항을 사용할 수 있습니다.
수정 된 KPI 의미론: 공식 및 집계 창.

3. 4 통합 및 E2E

DAG 무결성: 트리거, 종속성, dempotent 반복.
전체 경로: 소스 → 원시 → 선별 → 마트 → BI/API; RLS/CLS.

3. 5 성능 및 비용

p95/p99 작업 대기 시간, 처리량 (행/s), 볼륨/값.
성능 회귀 테스트 및 스캔 한계.

3. 6 보안 및 개인 정보 보호

PII/PCI 마스킹 (결정 론적 토큰 화).
RLS/CLS 점검-사용자는 자신 만 볼 수 있습니다.
내보내기/스냅 샷: "원시" 개인 필드가 없습니다.

4) 스트리밍의 세부 사항 (Kafka/Flink/Spark Structured Streaming)

워터 마크 및 지연 시간: 늦은 이벤트가있는 창 테스트 (T + 자체), 올바른 재 계산.
정확히 한 번 의미: '이벤트 _ id', demempotent 항목 (upsert/merge) 에 의한 dedup.
순서 외: '이벤트 _ time' 에 의한 집계 불변; 'ingested _ at' 수정.
손실/반복: 파티의 드롭/게임을 시뮬레이션하고 쇼케이스의 정확성을 확인하십시오.

5) 이념과 결정론 (무엇과 방법)

단계를 다시 시작하면 동일한 결과가 나타납니다 (동일한 창 매개 변수 포함).
녹음 - 준비 및 원자 교체를 통한.
SCD1/SCD2와의 병합 논리는 마지막 쓰기, 소스 우선 순위로 다룹니다.
UDF/집계 결정성: 동일한 입력 → 동일한 출력.

6) 테스트 데이터 관리

황금 데이터 세트: 수동 검증이 가능한 작은 표준.
Synthetics + 데이터 팩토리: 도메인 가장자리 (null, 익스트림 값, 유니 코드, TZ) 를 다룹니다.
식별되지 않은 prod 샘플: 개인 정보 보호 일치.
계층 소설: 원시 이벤트, 중간 계층, 최종 쇼케이스.

7) 데이터 계약-예제 및 규칙

YAML 계약 (단순화):
yaml dataset: orders schema:
- name: order_id; type: string; unique: true
- name: user_id; type: string; not_null: true
- name: amount; type: decimal(18,2); min: 0
- name: event_time; type: timestamp; tz: UTC freshness_sla: 10m dq_rules:
- "pct_null(user_id) < 0. 1%"
- "duplicates(order_id) = 0"
- "sum(amount) >= 0"
evolution:
allowed_minor_additions: true breaking_changes_require: approval: 'data-governance'
actions_on_violation:
- quarantine_partition
- replay_last_60m

8) 관찰 및 SLO 테스트

수출 지표: 신선도, 완전성, 독창성, Grafana/Prometheus로의 대기 시간.
SLO는 prod (Synthetics) 에서 "빨간색" 단위 테스트로 경고합니다.
회귀 보고서: "X p95 JP가 40% 릴리스 된 후".

9) CI/CD 및 미디어

CI: 단위 + DQ + PR 계약; 스키마-디프; SQL 정적 분석 (린터).
샌드 박스/스테이징: 실행 통합 및 e2e, 보안 데이터로 혼돈 테스트.
기능 플래그: 카나리아 bs/모델/공식.
카탈로그: 체계 버전, KPI 공식, 계보; 자동 문서 업데이트.

10) 카오스 데이터 테스트 (카오스 데이터)

복제/누락, 지연, 고장난 주입.
중개인/파티 드롭, "파손 된" 파일, 스키마 드리프트.
검증: 자동 수리 (재생/백필), 검역 및 경고, MTTR 데이터.

11) 부하 및 비용

p95 프로파일/피크가있는 교통 발생기.
스캔/단계 제한 (바이트 스캔, 타임 캡).
A/B 값 프로파일 러: "오래된" 대 "새로운" 모델/쿼리.

12) 도구 (샘플 클래스)

DQ/계약: dbt 테스트, Great Expectations, Dequ, Soda, 커스텀 라인터.
오케스트레이션: 기류/Dagster/Argo/Prefect (각 단계의 테스트 운영자).
플랫폼: Bigquery/Snowflake/Redshift/ClickHouse/Delta/Iceberg/Hudi.
스트리밍: Kafka, Flink, Spark 스트리밍; 지역 환경을위한 테스트 컨테이너.
관찰 가능성: Prometheus/Grafana/Otel; DataHub/Amundsen/Collibra 디렉토리.

13) 안티 패턴

"테스트 할 것이 없습니다. SQL 일뿐입니다" .장치가없고 DQ → 메트릭 브레이크가 있습니다.
E2E 만: 느리고 불안정하며 고장의 원인은 명확하지 않습니다.
SELECT: MINOR 진화에 따라 중단됩니다.
테스트에서 OLTP의 실시간 읽기: 불안정성 및 플레이크.
황금 세트 부족: 결과와 비교할 것이 없습니다.
demempotency 테스트 없음: 데이터를 다시 실행합니다.
잊혀진 스트리밍: 대기 시간/주문 외/재전송이 테스트되지 않았습니다.

14) 구현 로드맵

1. 기초: 변환, 골든 세트, SQL 린터, 톱 10 쇼케이스 DQ 규칙의 단위 테스트.
2. 계약: CI, SemVer의 스키마-디프, 자동 호환성 검사.
3. 통합: 중요한 스트림에 대한 DAG 테스트, demempotency, e2e.
4. 스트리밍: 워터 마크/lateness, dedup/idempotent 싱크 테스트.
5. SLO 및 혼돈: 판매, 경고, 혼돈 시나리오, MTTR 목표의 품질 지표.
6. 최적화: perf 회귀, 예산 경비원, 카나리아 석방.

15) 시험판 점검표

  • 단위 테스트는 주요 변환 및 UDF를 다룹니다.
  • 신선도/완전성/고유성/범위에 대한 DQ 규칙이 통과합니다.
  • 계약 및 스키마 디프는 녹색입니다. appruv가 없으면 변경 사항이 없습니다.
  • Idempotency 테스트; 원자 싱크/병합 작업.
  • 스트리밍: 워터 마크/레이트 데이터/오프 오더 커버; 제자리에서 제거.
  • SLO 지표가 노출됩니다. 경고가 구성됩니다. 런북입니다.
  • 테스트 데이터는 안전합니다. PII 마스크; RLS/CLS가 확인되었습니다.
  • perf 회귀 없음; 스캔/시간 제한이 충족되었습니
  • 기본 시나리오에 대한 카오스 테스트 통과; MTTR- 타겟을 달성 할 수 있습니다.

16) 미니 템플릿 예

16. 1 SQL 장치 테스트 (pseudo-dbt):

sql
-- tests/assert_positive_amount. sql select count() as c from {{ ref('fct_payments') }}
where amount < 0 having c = 0

16. 2 위대한 기대 스타일:

yaml expect_table_row_count_to_be_between:
min_value: 1000 mostly: 0. 99 expect_column_values_to_not_be_null:
column: user_id expect_column_values_to_be_unique:
column: txn_id

16. 3 스트림에서 지연 시간 확인 (의사 코드):

python emit(events_out_of_window <= threshold)
emit(reprocessed_events == late_events_detected)

16. 4 계약 테스트 (스키마 디프 CI):

bash schema-diff --current models/orders. yml --target prod_schema. yml --semver

17) 결론

데이터 파이프 라인 테스트는 단편적인 점검 모음이 아닌 시스템 분야입니다. 테스트, 수축 및 관찰 가능성의 피라미드와 demempotency, 회로 진화 및 스트리밍 불변량의 관행을 결합하십시오. 그러면 릴리스가 빨라지고 사고가 드물고 짧아지며 데이터에 대한 신뢰가 지속 가능해집니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.