dbt snapshot 명령어
dbt snapshot 명령어
dbt snapshot 명령어는 프로젝트에 정의된 스냅샷(Snapshot)을 실행해요. 스냅샷은 소스 데이터의 변경 사항을 시간에 따라 기록하도록 type-2 Slowly Changing Dimensions(SCD)를 구현해서, 원본 테이블의 변화를 추적할 수 있게 해줘요. 일정(예: 매일)을 두고 dbt snapshot을 돌려서 원본 테이블의 변경을 캡처해 보세요.
출처: 문서
본문
YAML로 strategy와 unique_key를 포함한 스냅샷을 정의할 수 있고, 설정 방법은 스냅샷 구성(Snapshot configurations)을 참고하면 돼요. 스냅샷은 dbt build의 일부로도 실행할 수 있어요.
dbt는 dbt_project.yml의 snapshot-paths에 나열된 디렉터리에서 스냅샷을 찾아요. 기본값은 snapshots/ 디렉터리예요. 스냅샷을 여러 폴더에 나눠 두면 경로를 여러 개 지정할 수도 있어요.
사용법 (Usage)
터미널에서 지원되는 전체 옵션 목록을 보려면 다음을 실행하세요.
dbt snapshot --help
--select나 --exclude로 어떤 스냅샷을 실행할지 선택할 수 있어요. 선택 구문은 노드 선택 구문(Node selection syntax)을 참고하세요. dbt snapshot은 --target, --threads 같은 일반적인 커맨드라인 옵션도 지원해요. 플래그 상세(로깅 옵션 포함)는 플래그(전역 config) 문서(About flags)를 참고하세요.
스냅샷 SQL이 var() 함수로 값을 참조할 땐 --vars를 사용해요. 구문·우선순위·더 많은 예시는 커맨드라인에서 변수 정의하기(Defining variables on the command line)를 참고하세요.
dbt snapshot --select my_snapshot --vars '{"cutoff_date": "2026-01-01"}'
스냅샷은 전체 새로고침(full refresh)을 무시해요
스냅샷은 full_refresh config와 --full-refresh 플래그를 모두 무시해요. dbt build --full-refresh나 dbt snapshot --full-refresh처럼 스냅샷 노드를 포함하는 명령이라도, 스냅샷은 평소처럼 실행되며 스냅샷 테이블을 drop하거나 재생성하지 않아요. 그래서 기존 스냅샷 이력은 보존돼요.
스냅샷의 컴파일된 SQL (Compiled SQL)
dbt v1.12부터는 dbt compile이나 dbt compile --select orders_snapshot을 실행해서 이 스냅샷에 대해 생성된 SQL을 확인할 수 있어요. 컴파일된 SQL은 target/compiled/에 열어서 생성된 쿼리를 검사·디버깅할 수 있어요. 여러 스냅샷이 같은 소스 파일에 정의돼 있어도, 각 스냅샷은 저마다의 SQL 파일로 컴파일돼요.
더 알아보기 (Learn more)
- 스냅샷 설정과 전략에 대해선 Snapshot configurations 문서를 참고하세요.
- dbt build 명령어로 스냅샷을 함께 실행할 수도 있어요.