오픈소스/dbt
dbt snapshot
pastime
2023. 11. 13. 18:50
728x90
dbt snapshot이란
데이터를 분석하다보면 과거(이전)데이터를 봐야하는 경우가 많다 (히스토리테이블처럼)
snapshot DIR에 해당 쿼리를 추가한다
{% snapshot user_snapshot %}
{{
config(
target_database='root',
target_schema='source',
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
)
}}
SELECT * FROM {{ source('user_table', 'user_info')}}
{% endsnapshot %}
이러한 정보를 가진 user_info 테이블로 테스틀 해보면
dbt snapshot
새로 테이블이 생성된것을 확인할수 있다
추가된 컬럼의 정보 : https://docs.getdbt.com/docs/build/snapshots
Add snapshots to your DAG | dbt Developer Hub
Read this tutorial to learn how to use snapshots when building in dbt.
docs.getdbt.com
이후 데이터를 수정해서 다시 스냅샷을 찍어보면
컬럼이 추가된것을 볼수있다
여기서 수정 전의 데이터는 dbt_vaild_to 에 업데이트 된 시간이 찍힌다.
쿼리로 확인할땐 dbt_vaild_to is null 등으로 필터링 하면 될듯하다.
하지만 삭데된 데이터는 추적이 불가능했는데
id가 2인 값을 제거를 한 이후 다시 실행을 하여도 테이블에 변화가 없었다
삭제된것도 추적을 하고싶다면 위의 쿼리에 옵션을 추가하면 된다
{% snapshot user_snapshot %}
{{
config(
target_database='root',
target_schema='source',
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
invalidate_hard_deletes=True, # default False
)
}}
SELECT * FROM {{ source('user_table', 'user_info')}}
{% endsnapshot %}
이후 다시 명령어를 실행하면
삭제한 row에 대한 dbt_vaild_to 이 변경된것을 확인할 수 있다
728x90