Delta Lake Time Travel — VACUUM이 지운 과거는 되돌아갈 수 없다
Spark Structured Streaming stream-stream join 및 Delta Lake Time Travel 공식 문서 종합 (웹 리서치, 2026) — Apache Spark 공식문서(Structured Streaming Programming Guide — Join Operations), Delta Lake 공식문서(Time travel) Delta Lake 공식 블로그 Time Travel, Microsoft Fabric 공식문서 Delta Lake time travel
이 모듈을 다 읽으면
- VERSION AS OF/TIMESTAMP AS OF로 과거 버전을 조회하는 방법을 설명할 수 있다
- spark-learn-55의 VACUUM 보존 기간이 Time Travel의 조회 가능 범위를 어떻게 제한하는지 설명할 수 있다
spark-learn-64의 CDF(변경 이력 스트림)와 spark-learn-55의 VACUUM(오래된 파일 정리)을 전제로, 테이블의 과거 스냅샷 자체를 그대로 조회하는 Time Travel과, 그것이 VACUUM 보존 기간에 의해 근본적으로 제약받는다는 점을 정리한다.
VERSION AS OF / TIMESTAMP AS OF — 과거 스냅샷을 그대로 조회한다
Delta Lake 테이블은 SQL에서 VERSION AS OF(버전 번호로 조회)나 TIMESTAMP AS OF(시각으로 조회)를 써서 과거의 특정 시점 스냅샷을 그대로 읽을 수 있다. spark-learn-64에서 다룬 CDF가 '무엇이 어떻게 바뀌었는지'(변경 이력, insert/update/delete 행 단위)를 보여주는 것과 달리, Time Travel은 '그 시점에 테이블 전체가 어떤 상태였는지'를 스냅샷 그대로 재현해서 보여준다 — 둘은 같은 트랜잭션 로그 메커니즘을 다른 방식으로 활용하는 상호보완적 기능이다.
핵심 포인트
- VERSION AS OF(버전 번호)/TIMESTAMP AS OF(시각)로 과거 특정 시점의 테이블 스냅샷을 그대로 조회
- CDF가 '무엇이 바뀌었는지'(변경 이력)를 보여준다면, Time Travel은 '그 시점에 전체가 어땠는지'(스냅샷)를 재현 — 같은 트랜잭션 로그를 다르게 활용하는 상호보완 기능
Time Travel의 진짜 제약 — 트랜잭션 로그 보존과 물리 파일 보존 둘 다 필요
Time Travel이 특정 버전으로 되돌아갈 수 있으려면 두 가지가 동시에 남아있어야 한다 — 그 버전을 가리키는 트랜잭션 로그 항목(delta.logRetentionDuration으로 제어, 기본 30일)과, 그 버전이 참조하는 실제 데이터 파일(디스크에 물리적으로 존재해야 함)이다. 즉 로그 기록이 남아있어도 파일이 없으면, 혹은 파일이 남아있어도 로그가 없으면 Time Travel은 불가능하다.
핵심 포인트
- Time Travel이 되려면 (1) 트랜잭션 로그 항목(delta.logRetentionDuration, 기본 30일)과 (2) 그 버전이 참조하는 실제 데이터 파일 둘 다 남아있어야 함
- 둘 중 하나라도 없으면(로그만 있고 파일이 지워졌거나, 그 반대) 해당 버전으로 되돌아갈 수 없음
VACUUM과의 충돌 — 지워진 파일은 영원히 못 돌아간다
spark-learn-55에서 다룬 VACUUM은 기본 7일 보존 기간이 지난, 더 이상 어떤 활성 버전도 참조하지 않는 파일을 물리적으로 삭제한다. 문제는 VACUUM이 어떤 파일을 지우고 나면, 그 파일을 필요로 했던 과거 테이블 버전으로는 다시는 Time Travel할 수 없게 된다는 것이다 — 트랜잭션 로그 항목이 아직 남아있어도 소용없다. 그래서 공식 문서는 VACUUM 보존 기간을 실제 Time Travel·복구 요구사항보다 짧게 낮추지 말라고 권고하고, 특정 버전으로 돌아가기 전에는 DESCRIBE HISTORY로 그 버전이 아직 유효한지 먼저 확인하라고 안내한다.
핵심 포인트
- VACUUM이 파일을 지우면 그 파일이 필요했던 과거 버전은 트랜잭션 로그가 남아있어도 다시는 Time Travel 불가능
- 공식 권고: VACUUM 보존 기간을 실제 필요한 Time Travel·복구 기간보다 짧게 잡지 말 것 + DESCRIBE HISTORY로 버전 유효성 사전 확인