Delta Lake Change Data Feed(CDF) — 테이블의 행 단위 변경 이력을 그대로 읽기
Spark DataFrame.explain() 모드 및 Delta Lake Change Data Feed 공식 문서 종합 (웹 리서치, 2026) — PySpark 공식 문서(DataFrame.explain) + Delta Lake 공식 문서(delta-change-data-feed) Delta Lake 공식 문서 Change data feed
이 모듈을 다 읽으면
- CDF가 켜져 있을 때 UPDATE 한 번이 왜 두 개의 행(pre/postimage)으로 기록되는지 설명할 수 있다
- readChangeFeed로 변경 이력을 조회하는 방법을 설명할 수 있다
spark-learn-55에서 다룬 Delta Lake 유지보수(OPTIMIZE/VACUUM)를 전제로, 테이블에 일어난 삽입·수정·삭제를 행 단위로 그대로 추적할 수 있게 해주는 Change Data Feed(CDF) 기능을 정리한다.
활성화 — 테이블 속성으로 명시적으로 켜야 한다
CDF는 기본적으로 꺼져 있으며, delta.enableChangeDataFeed 테이블 속성을 true로 설정해야 활성화된다 — CREATE TABLE 시점에 TBLPROPERTIES로 지정하거나 기존 테이블에 ALTER로 나중에 켤 수도 있다. 켜진 이후의 변경사항부터 변경 이력이 기록되기 시작한다.
핵심 포인트
- CDF는 기본 비활성 — delta.enableChangeDataFeed 테이블 속성을 true로 설정해야 활성화(CREATE 시점 또는 나중에 ALTER)
_change_type — insert/delete는 1행, update는 2행(pre/postimage)
변경 이력 데이터에는 원본 컬럼 외에 _change_type, _commit_version, _commit_timestamp라는 메타데이터 컬럼이 추가된다. _change_type 값은 insert/delete/update_preimage/update_postimage 네 가지인데, insert와 delete는 각각 행 하나로 기록되는 반면 update는 update_preimage(수정 전 값)와 update_postimage(수정 후 값) 두 개의 행으로 나뉘어 기록된다 — 이는 다운스트림 시스템이 두 스냅샷을 비교해 뭐가 바뀌었는지 추론할 필요 없이, '무엇이 어떻게 바뀌었는지'를 완전한 전후 쌍으로 바로 받아볼 수 있게 하기 위한 설계다.
핵심 포인트
- 메타데이터 컬럼 3개 추가: _change_type(insert/delete/update_preimage/update_postimage), _commit_version, _commit_timestamp
- update는 preimage(수정 전)+postimage(수정 후) 2개 행으로 기록 — 다운스트림이 두 스냅샷을 비교·추론할 필요 없이 완전한 전후 쌍을 바로 받도록 하는 설계
조회 — readChangeFeed + 버전/타임스탬프 범위
변경 이력을 조회하려면 readChangeFeed 옵션을 true로 설정하고, startingVersion/endingVersion(정수 버전 번호) 또는 startingTimestamp/endingTimestamp(yyyy-MM-dd HH:mm:ss 형식) 중 하나로 범위를 지정한다. 끝점(ending)을 생략하면 시작점부터 최신 버전까지의 모든 변경사항을 읽어온다 — 즉 '이 시점 이후로 무슨 일이 있었는지 전부 보여줘'라는 조회가 자연스럽게 표현된다.
핵심 포인트
- readChangeFeed=true + startingVersion/endingVersion(정수) 또는 startingTimestamp/endingTimestamp(문자열)로 범위 지정
- 끝점 생략 시 시작점부터 최신 버전까지 전부 조회 — 특정 시점 이후의 모든 변경사항을 자연스럽게 표현