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

Конфигурации Redshift

Стратегии инкрементальной материализации

В dbt-redshift поддерживаются следующие стратегии инкрементальной материализации:

  • append (по умолчанию, если unique_key не определен)
  • merge
  • delete+insert (по умолчанию, если unique_key определен)
  • microbatch

Все эти стратегии унаследованы от dbt-postgres.

Оптимизация производительности

Использование sortkey и distkey

Таблицы в Amazon Redshift имеют две мощные оптимизации для улучшения производительности запросов: distkeys и sortkeys. Указание этих значений в качестве конфигураций на уровне модели применяет соответствующие настройки в сгенерированном CREATE TABLE . Обратите внимание, что эти настройки не будут иметь эффекта на модели, установленные как view или ephemeral.

  • dist может иметь значение all, even, auto или имя ключа.
  • sort принимает список ключей сортировки, например: ['reporting_day', 'category']. dbt будет строить ключ сортировки в том порядке, в котором указаны поля.
  • sort_type может иметь значение interleaved или compound. Если настройка не указана, sort_type по умолчанию принимает значение compound.

При работе с ключами сортировки настоятельно рекомендуется следовать лучшим практикам Redshift по эффективности и кардинальности ключей сортировки.

Ключи сортировки и распределения следует добавлять в блок {{ config(...) }} в файлах модели .sql, например:

my_model.sql
-- Пример с одним ключом сортировки
{{ config(materialized='table', sort='reporting_day', dist='unique_id') }}

select ...


-- Пример с несколькими ключами сортировки
{{ config(materialized='table', sort=['category', 'region', 'reporting_day'], dist='received_at') }}

select ...


-- Пример с чередующимися ключами сортировки
{{ config(materialized='table',
sort_type='interleaved'
sort=['category', 'region', 'reporting_day'],
dist='unique_id')
}}

select ...

Для получения дополнительной информации о distkeys и sortkeys, ознакомьтесь с документацией Amazon:

Поздние связывающие представления

Redshift поддерживает представления, не связанные с их зависимостями, или поздние связывающие представления. Эта опция DDL "отвязывает" представление от данных, которые оно выбирает. На практике это означает, что если вышестоящие представления или таблицы удаляются с квалификатором каскада, позднее связывающее представление не удаляется.

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

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

my_view.sql
{{ config(materialized='view', bind=False) }}

select *
from source.data

Чтобы сделать все представления поздними связывающими, настройте ваш файл dbt_project.yml следующим образом:

dbt_project.yml
models:
+bind: false # Материализовать все представления как поздние связывающие
project_name:
....

Материализованные представления

Адаптер Redshift поддерживает материализованные представления с следующими параметрами конфигурации:

ПараметрТипОбязательныйПо умолчаниюПоддержка мониторинга изменений
on_configuration_change<string>нетapplyн/д
dist<string>нетevendrop/create
sort[<string>]нетnonedrop/create
sort_type<string>нетauto если нет sort
compound если sort
drop/create
auto_refresh<boolean>нетfalsealter
backup<string>нетtrueн/д
dbt_project.yml
models:
<resource-path>:
+materialized: materialized_view
+on_configuration_change: apply | continue | fail
+dist: all | auto | even | <field-name>
+sort: <field-name> | [<field-name>]
+sort_type: auto | compound | interleaved
+auto_refresh: true | false
+backup: true | false

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

Узнайте больше об этих параметрах в документации Redshift docs.

Автообновление

ПараметрТипОбязательныйПо умолчаниюПоддержка мониторинга изменений
auto_refresh<boolean>нетfalsealter

Redshift поддерживает автоматическую настройку обновления для материализованных представлений. По умолчанию материализованное представление не обновляется автоматически. dbt отслеживает этот параметр на предмет изменений и применяет их с помощью оператора ALTER.

Узнайте больше о параметрах в документации Redshift.

Резервное копирование

ПараметрТипОбязательныйПо умолчаниюПоддержка мониторинга изменений
backup<boolean>нетtrueн/д

Redshift поддерживает настройку резервного копирования кластеров на уровне объектов. Этот параметр определяет, должно ли материализованное представление быть включено в резервную копию кластера. По умолчанию материализованное представление будет включено в резервную копию во время снимка кластера. dbt не может отслеживать этот параметр, так как он не доступен для запроса в Redshift. Если значение изменится, материализованное представление должно пройти через --full-refresh, чтобы его установить.

Узнайте больше об этих параметрах в документации Redshift docs.

Ограничения

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

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

Узнайте больше об ограничениях материализованных представлений в документации Redshift docs.

0