목적과 학습 목표
JSON (JavaScript Object Notation) 파일을 수집하면서, 소스 시스템이 새 컬럼을 추가 했을 때 Auto Loader가 어떻게 자동으로 대응하는지를 실습합니다. 실제 프로덕션 환경에서 가장 빈번하게 발생하는 문제인 스키마 드리프트 (Schema Drift) 를 안전하게 처리하는 방법을 익힙니다.학습 목표
스키마 드리프트(Schema Drift) 란?: 소스 시스템이 API 업데이트, 서비스 변경 등으로 기존 스키마에 새 필드를 추가하거나 타입을 바꾸는 현상입니다. 기존 파이프라인은 이를 인식하지 못해 에러가 발생하거나 새 데이터가 무시됩니다. Auto Loader의 스키마 진화 기능은 이 문제를 자동으로 처리합니다.
사전 준비
실습 1: 사전 준비와 CSV 수집 을 완료해야 합니다.- 카탈로그
training, 스키마auto_loader_lab, Volumeraw_data가 존재해야 합니다. - 다음 Python 임포트를 노트북 첫 셀에서 실행합니다:
실습 2A: JSON 파일 초기 수집
Step 1: JSON 샘플 데이터 생성
JSON Lines 포맷 (한 줄에 하나의 JSON 객체) 으로 고객 데이터를 생성합니다.Step 2: Auto Loader로 JSON 읽기
Step 3: Bronze 테이블에 저장
실습 2B: 스키마 진화 시뮬레이션
소스 시스템이 업그레이드되어 새 필드 2개 (phone, membership_level) 가 추가된 상황을 시뮬레이션합니다.
Step 1: v2 스키마 JSON 파일 생성
Step 2: 스키마 진화 트리거
동일한 스트리밍 쿼리를 다시 실행합니다. Auto Loader가 새 컬럼을 감지하고 스키마를 자동으로 확장합니다.내부 동작:schemaEvolutionMode=addNewColumns는 신규 파일에서 기존 스키마에 없는 컬럼을 발견하면,schemaLocation의 스키마 파일을 업데이트하고 스트림을 재시작합니다.mergeSchema=true는 Delta 테이블 자체의 스키마도 새 컬럼을 포함하도록 확장합니다.
Step 3: 스키마 진화 결과 확인
스키마 진화 결과:phone과membership_level컬럼이 테이블에 추가되었습니다. 이전 배치 (v1) 레코드는 해당 컬럼이NULL로 표시됩니다. 이것이 Backward Compatible Schema Evolution (하위 호환 스키마 진화) 입니다.
실습 2C: 중첩 JSON 구조 처리
실제 API 응답에서 자주 등장하는 중첩 JSON 구조를 처리합니다.StructType으로 추론됨):
심화 학습
스키마 진화 모드 비교 실습
4가지schemaEvolutionMode를 상황별로 비교합니다.
트러블슈팅: 타입 충돌 처리
소스 시스템이customer_id를 갑자기 STRING으로 바꾼 경우:
성능 튜닝: 대용량 JSON 처리
정리
핵심 요약
스키마 진화 의사결정 트리
다음 단계
- SDP와 Auto Loader 통합 —
read_files()함수로 Medallion Architecture (메달리온 아키텍처) 파이프라인을 구축합니다.