Конфигурации Snowflake
Динамические таблицы
Адаптер Snowflake поддерживает динамические таблицы.
Эта материализация специфична для Snowflake, что означает, что любая конфигурация модели, которая обычно идет вместе с dbt-core
(например, как с view
), может быть недоступна для динамических таблиц. Этот разрыв будет уменьшаться в будущих патчах и версиях.
Хотя эта материализация специфична для Snowflake, она во многом следует реализации материализованных представлений.
В частности, динамические таблицы имеют доступ к настройке on_configuration_change
.
Динамические таблицы поддерживаются с следующими параметрами конфигурации:
Узнайте больше об этих параметрах в документации Snowflake:
Целевое отставание
Snowflake позволяет два сценария конфигурации для планирования автоматических обновлений:
- На основе времени — Укажите значение в формате
<int> { seconds | minutes | hours | days }
. Например, если динамическую таблицу нужно обновлять каждые 30 минут, используйтеtarget_lag='30 minutes'
. - Нисходящий поток — Применимо, когда динамическая таблица ссылается на другие динамические таблицы. В этом сценарии
target_lag='downstream'
позволяет контролировать обновления на целевом уровне, а не на каждом уровне.
Узнайте больше о target_lag
в документации Snowflake. Обратите внимание, что Snowflake поддерживает целевое отставание в 1 минуту или дольше.
Ограничения
Как и в случае с материализованными представлениями на большинстве платформ данных, существуют ограничения, связанные с динамическими таблицами. Некоторые из них, которые стоит отметить, включают:
- SQL динамической таблицы имеет ограниченный набор функций.
- SQL динамической таблицы не может быть обновлен; динамическая таблица должна пройти через
--full-refresh
(DROP/CREATE). - Динамические таблицы не могут быть ниже по потоку от: материализованных представлений, внешних таблиц, потоков.
- Динамические таблицы не могут ссылаться на представление, которое находится ниже по потоку от другой динамической таблицы.
Найдите больше информации об ограничениях динамических таблиц в документации Snowflake.
Для ограничений dbt, эти функции dbt не поддерживаются:
Временные таблицы
Инкрементные слияния таблиц для Snowflake предпочитают использовать view
, а не temporary table
. Причина в том, чтобы избежать шага записи в базу данных, который инициировала бы временная таблица, и сэкономить время компиляции.
Однако остаются некоторые ситуации, когда временная таблица может достичь результатов быстрее или безопаснее. Конфигурация tmp_relation_type
позволяет вам выбрать временные таблицы для инкрементных сборок. Это определяется как часть конфигурации модели.
Чтобы гарантировать точность, инкрементная модель, использующая стратегию delete+insert
с определенным unique_key
, требует временной таблицы; попытка изменить это на представление приведет к ошибке.
Определено в YAML проекта:
name: my_project
...
models:
<resource-path>:
+tmp_relation_type: table | view ## Если не определено, по умолчанию используется view.
В формате конфигурации для SQL файла модели:
{{ config(
tmp_relation_type="table | view", ## Если не определено, по умолчанию используется view.
) }}
Переходные таблицы
Snowflake поддерживает создание переходных таблиц. Snowflake не сохраняет историю для этих таблиц, что может привести к заметному снижению ваших затрат на хранение в Snowflake. Переходные таблицы участвуют в путешествии во времени в ограниченной степени с периодом удержания по умолчанию в 1 день без периода резервного копирования. Взвесьте эти компромиссы при принятии решения о том, следует ли настраивать ваши модели dbt как transient
. По умолчанию все таблицы Snowflake, созданные dbt, являются transient
.
Настройка переходных таблиц в dbt_project.yml
Целая папка (или пакет) может быть настроена как переходная (или нет) путем добавления строки в файл dbt_project.yml
. Эта конфигурация работает так же, как и все конфигурации моделей, определенные в dbt_project.yml
.
name: my_project
...
models:
+transient: false
my_project:
...