목적과 학습 목표
이 실습은 Auto Loader (자동 로더) 전체 시리즈의 첫 번째 단계입니다. 클라우드 스토리지에 도착하는 파일을 자동으로 감지하고 증분 수집 하는 Auto Loader의 핵심 메커니즘을 직접 체험합니다.학습 목표
| 목표 | 설명 |
|---|---|
| 환경 구성 | Unity Catalog (유니티 카탈로그), Volume (볼륨), 샘플 데이터를 준비합니다 |
| 기본 파이프라인 | cloudFiles 포맷으로 CSV를 스트리밍 수집하고 Delta 테이블에 저장합니다 |
| 증분 처리 확인 | 새 파일 추가 시 기존 파일은 건너뛰고 신규 파일만 처리되는 것을 확인합니다 |
| Checkpoint 이해 | Checkpoint (체크포인트) 가 어떻게 이미 처리한 파일을 추적하는지 이해합니다 |
| 메타데이터 활용 | _metadata 컬럼으로 파일 출처를 Bronze 테이블에 기록합니다 |
Auto Loader의 핵심 가치: 일반 spark.read는 매번 모든 파일을 다시 읽습니다. Auto Loader는 체크포인트에 처리 상태를 기록하여 새로 도착한 파일만 처리 합니다. 파일이 수십억 개로 늘어나도 성능이 일정하게 유지됩니다.
사전 준비
필요 환경
| 항목 | 요구 사항 |
|---|---|
| Databricks Runtime | DBR 12.2 LTS 이상 (Auto Loader는 DBR 8.x부터 GA) |
| Unity Catalog | 활성화된 UC 환경 (Metastore가 Workspace에 연결되어 있어야 함) |
| 권한 | CREATE CATALOG, CREATE SCHEMA, CREATE VOLUME, CREATE TABLE 권한 |
| 클러스터 | Single Node 또는 Multi Node (본 실습은 Single Node로 충분) |
주의 사항
- 실습 전 클러스터가 Unity Catalog 모드 로 실행되어야 합니다 (Access Mode: Single User 또는 Shared).
- DBFS (
/dbfs/) 대신 UC Volume (/Volumes/) 경로를 사용합니다. 이것이 현재 Databricks 권장 방식입니다. availableNow=TrueTrigger (트리거) 를 사용하므로 스트림은 처리 완료 후 자동 종료됩니다.
1단계: 카탈로그 및 스키마 생성
auto_loader_lab 스키마가 목록에 나타납니다.
2단계: Volume 생성
Volume (볼륨) 은 Unity Catalog가 관리하는 파일 스토리지 경로입니다. Auto Loader의 소스 파일과 체크포인트를 모두 Volume에 저장합니다.
DBFS vs UC Volume: DBFS (/dbfs/user/hive/...) 는 레거시 경로입니다. 신규 워크로드는 반드시 UC Volume 을 사용하세요. Unity Catalog의 접근 제어(ACL), 감사 로그, 데이터 리니지가 Volume을 통해 작동합니다.
3단계: 샘플 데이터 생성
실습 1: CSV 파일 스트리밍 수집
Step 1: Auto Loader로 CSV 읽기
Auto Loader는 Spark Structured Streaming (구조적 스트리밍) 의cloudFiles 소스 포맷으로 구현되어 있습니다.
inferColumnTypes=true효과: 이 옵션이 없으면 모든 컬럼이STRING타입으로 수집됩니다.true로 설정하면amount는double,order_date는date로 자동 추론됩니다. 단, 처음 수집 시 일부 파일을 샘플링하여 추론하므로 핵심 컬럼은schemaHints로 명시적으로 지정하는 것을 권장합니다.
Step 2: Bronze 테이블에 저장
trigger 옵션 비교:
| Trigger | 동작 | 사용 시나리오 |
|---|---|---|
availableNow=True | 현재 파일 모두 처리 후 종료 | 스케줄 배치 (Databricks Jobs) |
processingTime='30 seconds' | 30초마다 신규 파일 처리 | Near Real-Time 수집 |
| 없음 (Continuous) | 신규 파일 즉시 처리, 계속 실행 | Real-Time 수집 (상시 클러스터) |
Step 3: 결과 확인
_rescued_data모니터링:rescued_rows가 0이면 모든 데이터가 정상적으로 파싱되었습니다. 0보다 크면 해당 행을 조회하여 원인을 파악해야 합니다:SELECT _rescued_data FROM bronze_orders WHERE _rescued_data IS NOT NULL LIMIT 5
Step 4: 새 파일 추가 및 증분 처리 확인
Auto Loader의 핵심인 증분 처리 를 직접 확인합니다.심화 학습
변형 시나리오 1: 잘못된 형식의 행 처리
실제 환경에서는 일부 행이 스키마에 맞지 않을 수 있습니다.변형 시나리오 2: Schema Hint (스키마 힌트) 로 타입 강제 지정
Auto Loader가amount를 STRING으로 잘못 추론하는 경우 힌트로 교정합니다.
변형 시나리오 3: 특정 파일 패턴만 수집
성능 튜닝 포인트
| 옵션 | 기본값 | 설명 |
|---|---|---|
cloudFiles.maxFilesPerTrigger | 1000 | 트리거당 처리할 최대 파일 수입니다. 파일이 크면 줄이고 작으면 늘립니다 |
cloudFiles.maxBytesPerTrigger | 없음 | 트리거당 최대 데이터 크기 (10g 형식). maxFilesPerTrigger와 함께 사용합니다 |
cloudFiles.useIncrementalListing | auto | 시간순 파티션 디렉토리 (/year=2025/month=03/)에서 true로 설정하면 스캔 범위를 줄여줍니다 |
정리
핵심 요약
| 개념 | 설명 |
|---|---|
cloudFiles 포맷 | Auto Loader의 Spark 소스 포맷. spark.readStream.format("cloudFiles")로 사용합니다 |
| Checkpoint (체크포인트) | 처리 완료한 파일 목록을 기록. 동일 체크포인트로 재실행하면 새 파일만 처리합니다 |
inferColumnTypes=true | 파일을 샘플링하여 컬럼 타입을 자동 추론합니다. schemaHints로 특정 컬럼을 덮어쓸 수 있습니다 |
rescuedDataColumn | 스키마 불일치 데이터를 유실 없이 보존합니다. 프로덕션에서 필수 설정입니다 |
_metadata 컬럼 | 파일 경로, 수정 시간 등 파일 출처 정보. 데이터 리니지 추적에 활용합니다 |
trigger(availableNow=True) | 배치 스타일 실행. 현재 파일을 모두 처리하고 스트림을 종료합니다 |
다음 단계
- JSON 수집과 스키마 진화 — JSON 포맷 수집과 새 컬럼이 추가되었을 때의 자동 대응을 실습합니다.