SCD2 với snapshot trong dbt

dbt trung cấp

Mike Metzger

Data Engineer

Snapshot là gì?

  • Xem các thay đổi của một tập dữ liệu theo thời gian
  • Minh họa các trạng thái khác nhau của một đối tượng, như
    • Trạng thái đơn hàng
    • Trạng thái sản xuất
    • Trạng thái giao hàng

Đơn hàng

1 Ảnh: micheile henderson trên Unsplash
dbt trung cấp

SCD2

  • Slowly changing dimension
  • Theo dõi thay đổi theo thời gian
  • dbt triển khai SCD2 bằng snapshot

Dữ liệu thay đổi

1 Ảnh: Luke Chesser trên Unsplash
dbt trung cấp

Ví dụ SCD2

  • Trạng thái đơn hàng
  • Các trạng thái có thể có:
    • Received
    • Packed
    • Shipped
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 trung cấp

SCD2 trong dbt

  • dbt dùng snapshot để triển khai SCD2
  • Có thể tự động theo dõi thay đổi
  • Thêm cột vào kết quả
    • 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 trung cấp

Triển khai snapshot trong dbt

  • Tệp 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 trung cấp

dbt snapshot

  • Chạy dbt snapshot
  • Tạo model mới dùng lệnh ref() để truy vấn snapshot
    • select * from {{ ref('snapshot_orders') }}
  • Chạy dbt snapshot thường xuyên để thấy dữ liệu có thể đã thay đổi
    • Lên lịch cập nhật tự động
dbt trung cấp

Cùng luyện tập nào!

dbt trung cấp

Preparing Video For Download...