목적과 학습 목표
파이프라인이 실행된 후 수집된 데이터가 올바른지 검증하고, 실제 운영 환경에서 발생하는 장애를 진단하고 해결하는 방법을 익힙니다.학습 목표
| 목표 | 설명 |
|---|---|
| 종합 품질 리포트 | Bronze/Silver/Gold 전 계층의 데이터 정합성을 한 번에 확인합니다 |
| 체크포인트 관리 | 손상된 체크포인트를 안전하게 리셋하는 방법을 익힙니다 |
| 스키마 충돌 해결 | 타입 불일치, 컬럼 삭제 등 스키마 충돌 상황을 처리합니다 |
| 에러 패턴 진단 | 일반적인 에러 메시지와 원인, 해결 방법을 이해합니다 |
| 성능 진단 | 수집 지연, 메모리 압박 등 성능 문제를 진단합니다 |
사전 준비
실습 1~3 을 완료한 후 진행합니다. 다음 테이블이 존재해야 합니다:training.auto_loader_lab.bronze_orderstraining.auto_loader_lab.bronze_customerstraining.auto_loader_lab.silver_orders(실습 3)training.auto_loader_lab.silver_customers(실습 3)
데이터 검증
검증 체크리스트
| 검증 항목 | 확인 방법 | 통과 기준 |
|---|---|---|
| 행 수 정합 | 원본 파일 행 수 vs 테이블 행 수 비교 | 완전 일치 또는 허용 범위 내 |
| 중복 없음 | 기본 키 GROUP BY로 중복 확인 | 중복 레코드 0건 |
| NULL 비율 | 필수 컬럼 NULL 비율 | 0% (필수 컬럼), 허용 범위 내 |
_rescued_data | 파싱 실패 건수 확인 | 0건 또는 허용 범위 내 |
| 타입 정합 | DESCRIBE로 컬럼 타입 확인 | 예상 타입과 일치 |
| Silver 필터링 | Bronze 행 수 - Silver 행 수 = 품질 위반 건수 | 예상 범위 내 |
| Gold 집계 정합 | Silver 합계 = Gold 합계 | 일치 |
종합 데이터 품질 리포트
Bronze → Silver 데이터 손실 분석
Gold 집계 정합성 검증
_rescued_data 심층 분석
_rescued_data 컬럼에 데이터가 있다면 원인을 파악합니다.
트러블슈팅
체크포인트 리셋
체크포인트가 손상되었거나 처음부터 다시 처리해야 할 때 사용합니다.체크포인트를 삭제하면 벌어지는 일: Auto Loader는 “처음 본 디렉토리”로 인식하여 모든 파일을 다시 읽습니다.APPEND모드로 쓰고 있다면 데이터가 중복됩니다. 반드시 대상 테이블도 함께 초기화하거나,MERGE INTO(멱등 처리) 로직을 사용하세요.
스키마 충돌 해결
| 상황 | 원인 | 해결 방법 |
|---|---|---|
| 새 컬럼 추가됨 | 소스 스키마 확장 | schemaEvolutionMode=addNewColumns + mergeSchema=true |
| 기존 컬럼 타입 변경 | 소스 타입 변경 | schemaHints로 타입 고정 또는 Bronze를 전체 STRING으로 수집 |
| 기존 컬럼 삭제됨 | 소스에서 컬럼 제거 | Bronze 스키마 유지 (NULL로 채워짐), Silver에서 처리 |
| 스키마 추론 결과가 잘못됨 | 샘플 편향 | schemaHints로 핵심 컬럼 타입 명시 |
| 스키마 파일이 손상됨 | 체크포인트 오류 | cloudFiles.allowOverwrites=true + 스키마 경로 삭제 후 재실행 |
일반적인 에러와 해결 방법
| 에러 메시지 | 원인 | 해결 방법 |
|---|---|---|
PERMISSION_DENIED on volume/path | UC Volume 또는 S3 접근 권한 부족 | Unity Catalog 권한 (GRANT READ VOLUME) 또는 IAM 역할 확인 |
AnalysisException: path does not exist | 소스 경로가 없음 | 경로 오타 확인, Volume이 생성되었는지 확인 |
StreamingQueryException: ... checkpoint | 체크포인트 손상 또는 버전 불호환 | 체크포인트 삭제 후 재시작 |
DELTA_SCHEMA_CHANGE_SINCE_ANALYSIS | 스트리밍 중 스키마 변경 감지 | mergeSchema=true 옵션 추가 |
MALFORMED_RECORD_IN_PARSING | JSON/CSV 파싱 불가능한 레코드 | rescuedDataColumn 또는 badRecordsPath 설정 |
SchemaInferenceException: new columns found | failOnNewColumns 모드에서 새 컬럼 감지 | 스키마 업데이트 또는 addNewColumns 모드로 변경 |
OutOfMemoryError | 트리거당 처리 파일이 너무 많음 | maxFilesPerTrigger 또는 maxBytesPerTrigger 설정 |
OperationNotAllowedException: Cannot overwrite | APPEND 모드에서 덮어쓰기 시도 | outputMode("append")와 체크포인트 일관성 확인 |
성능 진단
파이프라인 모니터링 자동화
프로덕션에서는 데이터 품질을 자동으로 모니터링하는 뷰를 생성합니다.실습 정리 (리소스 삭제)
실습이 끝나면 생성한 리소스를 정리합니다.정리
전체 실습 학습 포인트 요약
| 실습 | 주요 학습 내용 |
|---|---|
| 실습 1: CSV 수집 | cloudFiles 포맷으로 CSV 수집, Checkpoint 기반 증분 처리, _metadata 컬럼 활용 |
| 실습 2: JSON + 스키마 진화 | JSON Lines 수집, schemaEvolutionMode=addNewColumns, 중첩 구조 Flatten |
| 실습 3: SDP 통합 | read_files()로 Medallion 파이프라인, CONSTRAINT로 데이터 품질 선언, Streaming Table vs Materialized View |
| 실습 4: 검증 & 트러블슈팅 | 종합 품질 리포트, 체크포인트 안전 리셋, 스키마 충돌 해결, 에러 패턴 진단 |
Auto Loader 운영 핵심 원칙
- 체크포인트는 소중하다: 절대 단독으로 삭제하지 마세요. 테이블과 함께 초기화해야 합니다.
_rescued_data는 필수: 설정하지 않으면 스키마 불일치 데이터가 조용히 사라집니다.- Bronze는 날것 그대로: 변환 없이 수집하고,
_source_file과_ingested_at을 항상 추가합니다. - SDP와 함께 사용: 단독 사용 대신 SDP를 활용하면 체크포인트/스키마 관리가 자동화됩니다.
availableNow=True로 비용 절감: 상시 실행이 필요 없다면 이 트리거로 배치 처리합니다.