Конфигурации 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
, например:
-- Пример с одним ключом сортировки
{{ 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:
- Документация AWS » Amazon Redshift » Руководство разработчика базы данных » Проектирование таблиц » Выбор стиля распределения данных
- Документация AWS » Amazon Redshift » Руководство разработчика базы данных » Проектирование таблиц » Выбор ключей сортировки
Поздние связывающие представления
Redshift поддерживает представления, не связанные с их зависимостями, или поздние связывающие представления. Эта опция DDL "отвязывает" представление от данных, которые оно выбирает. На практике это означает, что если вышестоящие представления или таблицы удаляются с квалификатором каскада, позднее связывающее представление не удаляется.
Использование поздних связывающих представлений в производственном развертывании dbt может значительно улучшить доступность данных в хранилище, особенно для моделей, которые материализуются как поздние связывающие представления и запрашиваются конечными пользователями, так как они не будут удалены при обновлении вышестоящих моделей. Кроме того, поздние связывающие представления могут использоваться с внешними таблицами через Redshift Spectrum.
Чтобы материализовать модель dbt как позднее связывающее представление, используйте опцию конфигурации bind: false
:
{{ config(materialized='view', bind=False) }}
select *
from source.data
Чтобы сделать все представления поздними связывающими, настройте ваш файл dbt_project.yml
следующим образом:
models:
+bind: false # Материализовать все представления как поздние связывающие
project_name:
....
Материализованные представления
Адаптер Redshift поддерживает материализованные представления с следующими параметрами конфигурации:
Параметр | Тип | Обязательный | По умолчанию | Поддержка мониторинга изменений |
---|---|---|---|---|
on_configuration_change | <string> | нет | apply | н/д |
dist | <string> | нет | even | drop/create |
sort | [<string>] | нет | none | drop/create |
sort_type | <string> | нет | auto если нет sort compound если sort | drop/create |
auto_refresh | <boolean> | нет | false | alter |
backup | <string> | нет | true | н/д |
- Файл проекта
- Файл свойств
- Блок конфигурации
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
version: 2
models:
- name: [<model-name>]
config:
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
{{ config(
materialized="materialized_view",
on_configuration_change="apply" | "continue" | "fail",
dist="all" | "auto" | "even" | "<field-name>",
sort=["<field-name>"],
sort_type="auto" | "compound" | "interleaved",
auto_refresh=true | false,
backup=true | false,
) }}
Многие из этих параметров соответствуют их аналогам для таблиц и были связаны выше. Параметры, уникальные для материализованных представлений, это функциональность автообновления и резервного копирования, которые описаны ниже.
Узнайте больше об этих параметрах в документации Redshift docs.
Автообновление
Параметр | Тип | Обязательный | По умолчанию | Поддержка мониторинга изменений |
---|---|---|---|---|
auto_refresh | <boolean> | нет | false | alter |
Redshift поддерживает автоматическую настройку обновления для материализованных представлений. По умолчанию материализованное представление не обновляется автоматически. dbt отслеживает этот параметр на предмет изменений и применяет их с помощью оператора ALTER
.
Узнайте больше о параметрах в документации Redshift.
Резервное копирование
Параметр | Тип | Обязательный | По умолчанию | Поддержка мониторинга изменений |
---|---|---|---|---|
backup | <boolean> | нет | true | н/д |
Redshift поддерживает настройку резервного копирования кластеров на уровне объектов. Этот параметр определяет, должно ли материализованное представление быть включено в резервную копию кластера. По умолчанию материализованное представление будет включено в резервную копию во время снимка кластера. dbt не может отслеживать этот параметр, так как он не доступен для запроса в Redshift. Если значение изменится, материализованное представление должно пройти через --full-refresh
, чтобы его установить.
Узнайте больше об этих параметрах в документации Redshift docs.
Ограничения
Как и в большинстве платформ данных, существуют ограничения, связанные с материализованными представлениями. Некоторые из них, которые стоит отметить, включают:
- Материализованные представления не могут ссылаться на представления, временные таблицы, пользовательские функции или поздние связывающие таблицы.
- Автообновление не может использоваться, если материализованное представление ссылается на изменяемые функции, внешние схемы или другое материализованное представление.
Узнайте больше об ограничениях материализованных представлений в документации Redshift docs.