SCD2 со снимками dbt

Средний уровень dbt

Mike Metzger

Data Engineer

Что такое снимок?

  • Отражает изменения набора данных во времени
  • Фиксирует различные состояния объекта, например
    • Статус заказа
    • Состояние производства
    • Статус доставки

Заказ

1 Фото: micheile henderson, Unsplash
Средний уровень dbt

SCD2

  • Медленно меняющееся измерение
  • Отслеживает изменения во времени
  • dbt реализует SCD2 с помощью снимков

Изменяющиеся данные

1 Фото: Luke Chesser, 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

SCD2 в dbt

  • 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...