Skip to main content

목적과 학습 목표

JSON (JavaScript Object Notation) 파일을 수집하면서, 소스 시스템이 새 컬럼을 추가 했을 때 Auto Loader가 어떻게 자동으로 대응하는지를 실습합니다. 실제 프로덕션 환경에서 가장 빈번하게 발생하는 문제인 스키마 드리프트 (Schema Drift) 를 안전하게 처리하는 방법을 익힙니다.

학습 목표

스키마 드리프트(Schema Drift) 란?: 소스 시스템이 API 업데이트, 서비스 변경 등으로 기존 스키마에 새 필드를 추가하거나 타입을 바꾸는 현상입니다. 기존 파이프라인은 이를 인식하지 못해 에러가 발생하거나 새 데이터가 무시됩니다. Auto Loader의 스키마 진화 기능은 이 문제를 자동으로 처리합니다.

사전 준비

실습 1: 사전 준비와 CSV 수집 을 완료해야 합니다.
  • 카탈로그 training, 스키마 auto_loader_lab, Volume raw_data 가 존재해야 합니다.
  • 다음 Python 임포트를 노트북 첫 셀에서 실행합니다:

실습 2A: JSON 파일 초기 수집

Step 1: JSON 샘플 데이터 생성

JSON Lines 포맷 (한 줄에 하나의 JSON 객체) 으로 고객 데이터를 생성합니다.

Step 2: Auto Loader로 JSON 읽기

예상 스키마 (v1 추론):

Step 3: Bronze 테이블에 저장


실습 2B: 스키마 진화 시뮬레이션

소스 시스템이 업그레이드되어 새 필드 2개 (phone, membership_level) 가 추가된 상황을 시뮬레이션합니다.

Step 1: v2 스키마 JSON 파일 생성


Step 2: 스키마 진화 트리거

동일한 스트리밍 쿼리를 다시 실행합니다. Auto Loader가 새 컬럼을 감지하고 스키마를 자동으로 확장합니다.
내부 동작: schemaEvolutionMode=addNewColumns는 신규 파일에서 기존 스키마에 없는 컬럼을 발견하면, schemaLocation의 스키마 파일을 업데이트하고 스트림을 재시작합니다. mergeSchema=true는 Delta 테이블 자체의 스키마도 새 컬럼을 포함하도록 확장합니다.

Step 3: 스키마 진화 결과 확인

예상 결과:
스키마 진화 결과: phonemembership_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 (메달리온 아키텍처) 파이프라인을 구축합니다.

참고 링크