CDC 메달리온 레이어
CDC로 쌓인 변경 로그를 분석가가 바로 쓸 수 있는 테이블로 정리한 dbt 레이어.
- dbt
- BigQuery
- BigLake
- Airflow
Situation
CDC로 적재까지는 됐지만 쌓인 것은 INSERT·UPDATE·DELETE 이벤트 로그였습니다. 분석가가 쓰려면 삭제된 행을 걸러내고, 같은 키의 최신 상태를 골라내고, 중복을 정리해야 했습니다. 그 작업을 각자 SQL로 반복하고 있었습니다.
Task
변경 로그를 분석가가 그대로 조회할 수 있는 형태로 정리하고, 그 정리가 주기적으로 자동으로 돌게 만들어야 했습니다.
Action
브론즈를 두 개로 나눴습니다. 최근 구간의 변경 이력을 보존하는 뷰와, 키별 최신 상태만 남기는 테이블입니다. 하나로 합치면 “UPDATE 이력을 남기고 싶다”와 “키당 한 행이어야 한다”가 서로 맞지 않아서, 역할을 나누는 편이 낫다고 봤습니다. 실버는 이 둘을 우선순위로 합쳐 키 유일성을 맞춘 뷰로 뒀습니다.
병합은 dbt 기본 전략 대신 매크로를 직접 썼습니다. 기본 전략은 하드 삭제를 반영하지 못했고, 이벤트가 순서를 어겨 도착했을 때 최신 값을 덮어쓰는 문제가 있었습니다.
파티션 키는 이벤트 시각이 아니라 생성 시각으로 잡았습니다. 이벤트 시각은 행이 수정될 때마다 움직여서 프루닝이 걸리지 않고 결국 풀스캔이 됩니다.
Result
- 전체 재생성 검증 107건 통과, 실버 레이어 키 유일성 검증 통과
- 한 번 실패해도 다음 실행(30분 뒤)에 빠진 구간이 메워짐 — 수동 복구 작업 0건
- 분석가가 조회하는 레이어를 뷰로 둬서 브론즈 갱신이 즉시 반영
- 임시 테이블(
__dbt_tmp) 잔존 0개 — 이전에는 12시간까지 남아 있었음 - 각자 반복하던 삭제 필터·최신 상태 선별 SQL이 조회 한 번으로 대체