dbt 스냅샷을 활용한 SCD2

중급 dbt

Mike Metzger

Data Engineer

스냅샷이란?

  • 시간에 따른 데이터셋 변화 추적
  • 객체의 다양한 상태 표현 (예:)
    • 주문 상태
    • 생산 상태
    • 배송 상태

주문

1 Photo by micheile henderson on Unsplash
중급 dbt

SCD2

  • 천천히 변하는 차원
  • 시간에 따른 변경 사항 추적
  • dbt는 스냅샷으로 SCD2 구현

변경 데이터

1 Photo by Luke Chesser on Unsplash
중급 dbt

SCD2 예시

  • 주문 상태
  • 가능한 상태:
    • 접수됨
    • 포장됨
    • 배송됨
id order_status last_updated
1 Shipped 2023-07-01 11:30
id order_status last_updated
1 Received 2023-07-01 10:45
1 Packed 2023-07-01 11:15
1 Shipped 2023-07-01 11:30
중급 dbt

dbt의 SCD2

  • dbt는 스냅샷으로 SCD2를 구현합니다
  • 변경 사항을 자동으로 추적합니다
  • 출력에 추가 컬럼을 추가합니다
    • dbt_valid_from
    • dbt_valid_to
id order_status last_updated dbt_valid_from dbt_valid_to
1 Received 2023-07-01 10:45 2023-07-01 10:45 2023-07-01 11:15
1 Packed 2023-07-01 11:15 2023-07-01 11:15 2023-07-01 11:30
1 Shipped 2023-07-01 11:30 2023-07-01 11:30 null
중급 dbt

dbt 스냅샷 구현

  • SQL 파일: snapshots/snapshot_name.sql
{% snapshot snapshot_orders %}

{{ config(
target_schema='snapshots',
strategy='timestamp',
unique_key='id',
updated_at='last_updated'
) }}
select * from {{ source('raw', 'orders') }}
{% endsnapshot %}
중급 dbt

dbt 스냅샷

  • dbt snapshot 실행
  • ref() 명령으로 스냅샷을 조회하는 새 모델 생성
    • select * from {{ ref('snapshot_orders') }}
  • 변경된 데이터 확인을 위해 dbt snapshot 자주 실행
    • 자동 업데이트 스케줄 설정
중급 dbt

연습해 봅시다!

중급 dbt

Preparing Video For Download...