20분
Delta Lake: ACID 트랜잭션의 마법
Delta Lake: ACID 트랜잭션과 Time Travel
Delta Lake: ACID 트랜잭션의 마법
Spark 심화: Streaming & Delta Lake > Delta Lake: ACID 트랜잭션과 Time Travel
학습 목표
ACID의 각 요소가 무엇인지 이해한다 트랜잭션 로그의 동작 방식을 파악한다 Delta Lake의 스키마 관리 방식을 안다
ACID가 뭐길래?
데이터베이스의 4대 원칙:
| 원칙 | 의미 | Delta Lake에서 |
|---|---|---|
| Atomicity | 전부 성공 or 전부 실패 | 커밋 전 파일 = 없는 것 |
| Consistency | 항상 유효한 상태 | 스키마 강제 |
| Isolation | 동시 작업 충돌 방지 | 낙관적 동시성 제어 |
| Durability | 커밋되면 영구 저장 | 트랜잭션 로그 |
트랜잭션 로그: 모든 비밀의 열쇠
에디터 로딩 중...
로그가 기록하는 것
- add: 어떤 파일이 추가됐는지
- remove: 어떤 파일이 삭제됐는지
- commitInfo: 언제, 누가, 무슨 작업을 했는지
- stats: 파일별 통계 (Data Skipping용)
읽기 동작: "현재 유효한 파일만"
에디터 로딩 중...
핵심: 실제로 삭제하지 않고 "삭제됨"으로 표시만 한다! → 언제든 과거 버전으로 돌아갈 수 있다 (Time Travel)
스키마 강제 (Schema Enforcement)
기본적으로 스키마가 다르면 쓰기 거부:
에디터 로딩 중...
좋은 것: 실수로 잘못된 데이터 넣는 것 방지 불편한 것: 스키마 변경이 필요할 때는?
스키마 진화 (Schema Evolution)
의도적으로 스키마를 변경하고 싶을 때:
에디터 로딩 중...
허용되는 변경
| 변경 | 허용? | 방법 |
|---|---|---|
| 컬럼 추가 | O | mergeSchema |
| 타입 확장 (INT → LONG) | O | mergeSchema |
| 컬럼 삭제 | X | 새 테이블 생성 |
| 타입 변경 (STRING → INT) | X | 새 테이블 생성 |
Delta Lake vs Parquet
| 기능 | Parquet | Delta Lake |
|---|---|---|
| ACID 트랜잭션 | X | O |
| Time Travel | X | O |
| 스키마 강제 | X | O |
| Upsert (MERGE) | X | O |
| Data Skipping | 제한적 | O |
| 동시 쓰기 | 충돌 가능 | 안전 |
| 가격 | 무료 | 무료 (오픈소스) |
결론: 모든 새 프로젝트는 Delta Lake로!