Перейти к основному содержимому

Конфигурации снимков

Узнайте об использовании конфигураций снимков в dbt, включая конфигурации, специфичные для снимков, и общие конфигурации.

Учитесь с помощью видео!
Чтобы посмотреть видеоуроки по теме Snapshots, перейдите в dbt Learn и ознакомьтесь с курсом Snapshots.

Доступные конфигурации

Конфигурации, специфичные для snapshot’ов

Конфигурации, специфичные для ресурса, применимы только к одному типу ресурса dbt, а не к нескольким типам ресурсов. Вы можете определить эти настройки в файле проекта (dbt_project.yml), в файле свойств (models/properties.yml для моделей, аналогично для других ресурсов) или внутри файла ресурса, используя макрос {{ config() }}.

Следующие конфигурации, специфичные для ресурса, доступны только для Snapshots:

Миграция конфигурации снимков

Последние конфигурации снапшотов, представленные в dbt Core v1.9 (такие как snapshot_meta_column_names, dbt_valid_to_current и hard_deletes), лучше всего подходят для новых снапшотов. Однако вы также можете внедрить их в уже существующие снапшоты, аккуратно выполнив миграцию схемы таблицы и конфигураций, чтобы избежать несогласованностей в данных снапшота.

Ниже описан рекомендуемый порядок действий:

  1. В вашей платформе данных создайте резервную копию таблицы снапшота. Например, вы можете скопировать её в новую таблицу:

    create table my_snapshot_table_backup as
    select * from my_snapshot_table;

    Это позволит восстановить снапшот, если во время миграции что-то пойдёт не так.

  2. Если вы планируете использовать новые конфигурации, добавьте необходимые колонки в существующую таблицу снапшота с помощью alter‑запросов. Ниже приведён пример того, какие колонки нужно добавить при использовании dbt_valid_to_current и snapshot_meta_column_names:

    alter table my_snapshot_table
    add column dbt_valid_from timestamp,
    add column dbt_valid_to timestamp;
  3. Затем обновите конфигурацию снапшота:

    snapshots:
    - name: orders_snapshot
    relation: source('something','orders')
    config:
    strategy: timestamp
    updated_at: updated_at
    unique_key: id
    dbt_valid_to_current: "to_date('9999-12-31')"
    snapshot_meta_column_names:
    dbt_valid_from: start_date
    dbt_valid_to: end_date
  4. Перед тем как внедрять сразу несколько новых конфигураций, тестируйте каждое изменение отдельно, запуская dbt snapshot в среде разработки или staging.

  5. Убедитесь, что выполнение снапшота завершается без ошибок, новые колонки создаются, а логика хранения истории работает так, как вы ожидаете. В результате таблица должна выглядеть примерно так:

    idstart_dateend_dateupdated_at
    12024-10-01 09:00:002024-10-03 08:00:002024-10-01 09:00:00
    22024-10-03 08:00:009999-12-31 00:00:002024-10-03 08:00:00
    32024-10-02 11:15:009999-12-31 00:00:002024-10-02 11:15:00
    Loading table...

    Примечание: колонка end_date (заданная через snapshot_meta_column_names) использует значение, указанное в dbt_valid_to_current (9999-12-31), для новых вставляемых записей вместо значения по умолчанию NULL. Для существующих записей значение end_date останется NULL.

warning

Если вы используете одну из последних конфигураций, таких как dbt_valid_to_current, без миграции ваших данных, у вас могут быть смешанные старые и новые данные, что приведет к некорректному результату.

Общие конфигурации

Общие конфигурации предоставляют более широкие операционные настройки, применимые к нескольким типам ресурсов. Как и конфигурации, специфичные для ресурсов, они также могут быть заданы в файле проекта, файлах свойств или в файлах, специфичных для ресурсов.

dbt_project.yml

Настройка снимков

Снимки могут быть настроены несколькими способами:

Конфигурации снапшотов применяются иерархически в указанном выше порядке, при этом более высокие уровни имеют приоритет. Вы также можете применять data tests к снапшотам с помощью свойства tests.

Примеры

  • Применение конфигураций ко всем снимкам

    Чтобы применить конфигурацию ко всем снимкам, включая те, что в установленных пакетах, вложите конфигурацию непосредственно под ключ snapshots:

    dbt_project.yml
    snapshots:
    +unique_key: id
  • Применение конфигураций ко всем снимкам в вашем проекте

    Чтобы применить конфигурацию ко всем снимкам только в вашем проекте (например, исключая любые снимки в установленных пакетах), укажите имя вашего проекта как часть пути к ресурсу.

    Для проекта с именем jaffle_shop:

    dbt_project.yml
    snapshots:
    jaffle_shop:
    +unique_key: id

    Аналогично, вы можете использовать имя установленного пакета для настройки снимков в этом пакете.

  • Применение конфигураций только к одному snapshot

    Вы также можете использовать полный путь к ресурсу (включая имя проекта и подкаталоги) для настройки отдельного снимка из вашего файла dbt_project.yml.

    Для проекта с именем jaffle_shop, с файлом снимка в каталоге snapshots/postgres_app/, где снимок называется orders_snapshot (как выше), это будет выглядеть так:

    dbt_project.yml
    snapshots:
    jaffle_shop:
    postgres_app:
    orders_snapshot:
    +unique_key: id
    +strategy: timestamp
    +updated_at: updated_at

    Вы также можете определить некоторые общие конфигурации в блоке config снимка. Однако мы не рекомендуем это для обязательной конфигурации снимка.

    dbt_project.yml

    snapshots:
    - name: orders_snapshot
    +persist_docs:
    relation: true
    columns: true

Нашли ошибку?

0
Loading