Как использовать адаптер dbt-greengage
Обзор
Адаптер dbt-greengage позволяет dbt работать с Greengage DB (на основе Greenplum) и входит в состав сервиса DBT в ADO.
Адаптер dbt-greengage основан на dbt-postgres и добавляет поддержку специфичных для Greengage DB возможностей, включая:
-
таблицы Append-Optimized (AO);
-
хранение с ориентацией на столбцы (Column-Oriented, CO);
-
политики распределения (distribution policies);
-
партиционирование (partitioning);
-
внешние таблицы (external tables);
-
материализованные представления и индексы.
Адаптер предоставляет:
-
совместимость с версиями dbt Core 1.3-1.11;
-
поддержку специфичной для Greengage DB функциональности;
-
обратную совместимость с существующими проектами dbt-greenplum.
|
ПРИМЕЧАНИЕ
Текущий релиз поддерживает только Greengage DB 6 (на основе PostgreSQL 9). При подключении к серверу Greengage DB 7 операции создания таблиц могут завершаться ошибкой компиляции. Поддержка Greengage DB 7 (на основе PostgreSQL 12) запланирована в будущих релизах.
|
Конфигурация
Адаптер входит в состав ADO вместе с сервисом DBT. Дополнительную информацию о сервисе DBT можно получить в статье Обзор сервиса DBT.
Чтобы настроить DBT для работы с базой данных Greengage DB, создайте конфигурационный файл profiles.yml, в котором будут описаны параметры подключения к базе данных.
Пример profiles.yml:
my-greengage-project:
target: dev
outputs:
dev:
type: greengage
host: localhost
port: 5432
user: gpadmin
password: <password>
dbname: warehouse
schema: dbt_dev
threads: 4
Обязательными являются следующие параметры:
-
host— хост Greengage DB; -
user— пользователь базы данных; -
password— пароль пользователя; -
dbname— имя целевой базы данных; -
schema— схема для объектов dbt.
Конфигурационный файл profiles.yml должен находиться на хосте с компонентом сервиса DBT. Путь к конфигурационному файлу необходимо указать в значении параметра DBT_PROFILES_DIR в конфигурации сервиса DBT в ADCM.
В качестве альтернативы можно указать путь в свойстве Profiles path при запуске команды DBT.
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
port |
Порт базы данных |
5432 |
threads |
Количество параллельных потоков dbt |
1 |
keepalives_idle |
Количество секунд простоя перед отправкой TCP keepalive-проверки |
0 |
connect_timeout |
Тайм-аут подключения в секундах |
10 |
search_path |
Переопределяет PostgreSQL |
— |
role |
Выполняет команду |
— |
sslmode |
Режим SSL, например: |
— |
kerberos_service_name |
Имя сервиса Kerberos для аутентификации GSSAPI |
— |
Полный список параметров подключения идентичен dbt-postgres.
Команды DBT
Сервис DBT поддерживает стандартные команды dbt для Greengage DB. Он обеспечивает выполнение моделей dbt, тестов, создание снепшотов (snapshots), генерацию документации и инкрементальные преобразования через действия ADCM и DAG Airflow.
Вы можете выполнить команду DBT с помощью действий сервиса ADCM.
Материализации
dbt-greengage поддерживает несколько типов материализации.
Адаптер автоматически выбирает пути генерации SQL, специфичные для Greengage DB, в зависимости от:
-
версии Greengage DB;
-
типа материализации;
-
конфигурации данных;
-
настроек партиционирования.
Поддерживаются следующие типы материализации:
table
Материализация table создает физическую таблицу и полностью управляет ее жизненным циклом.
Пример:
{{ config(materialized='table') }}
|
ПРИМЕЧАНИЕ
Greengage DB не поддерживает CREATE OR REPLACE TABLE. Из-за этого ограничения dbt-greengage реализует замену таблиц через явную логику удаления и повторного создания (drop-and-recreate). Этот процесс обрабатывается в GreengageRelation, который ограничивает replaceable_relations только представлениями (views).
|
При запуске dbt run --full-refresh адаптер выполняет:
-
для обычных таблиц:
DROP TABLE IF EXISTS … CASCADE→CREATE TABLE; -
для внешних таблиц:
DROP EXTERNAL TABLE IF EXISTS … CASCADE; -
для представлений:
CREATE OR REPLACE VIEW(работает напрямую).
Пример:
DROP TABLE IF EXISTS users CASCADE;
CREATE TABLE users AS
SELECT 1 AS id, 'Alice' AS name;
Ключевое слово CASCADE необходимо, поскольку схемы часто содержат зависимые объекты.
Материализация table полностью поддерживает параметры хранения Greengage DB.
Пример:
{{ config(
materialized='table',
appendoptimized=true,
orientation='column',
compresstype='ZSTD',
compresslevel=4,
blocksize=32768
) }}
Сгенерированный DDL:
CREATE TABLE users
WITH (
appendoptimized=true,
orientation=column,
compresstype=ZSTD,
compresslevel=4,
blocksize=32768
)
AS
SELECT ...
view
Материализация view создает стандартное SQL-представление в Greengage DB. В dbt-greengage ее реализация в основном наследуется от dbt-postgres. Однако Greengage DB добавляет ряд особенностей, специфичных для MPP-систем (Massively Parallel Processing), связанных с зависимостями объектов и удалением отношений (relation cleanup), поэтому адаптер предоставляет собственную реализацию удаления отношений.
В отличие от PostgreSQL, среды Greengage DB часто содержат глубоко взаимосвязанные объекты: иерархии секций (partition hierarchies), зависимые представления, внешние таблицы, материализованные представления и аналитические объекты, расположенные в разных схемах.
Для обеспечения надежной очистки и повторного создания объектов dbt-greengage переопределяет макрос greengage__drop_relation. Удаление всех отношений выполняется с использованием семантики CASCADE, когда это необходимо.
Пример жизненного цикла при замене модели:
DROP VIEW IF EXISTS analytics.products CASCADE;
CREATE VIEW analytics.products AS
SELECT ...
Такое поведение гарантирует корректное удаление зависимых объектов перед их повторным созданием.
Пример:
{{ config(
materialized='view'
) }}
select
order_id,
customer_id,
total_amount,
created_at
from {{ ref('stg_orders') }}
incremental
Материализация incremental оптимизирована для больших аналитических наборов данных и поддерживает несколько стратегий загрузки.
| Стратегия | Статус | Описание |
|---|---|---|
append |
Унаследована |
|
delete+insert |
Унаследована |
|
truncate+insert |
Пользовательская |
|
microbatch |
Пользовательская |
|
|
ПРИМЕЧАНИЕ
Адаптер не поддерживает стратегию |
{{ config(
materialized='incremental',
incremental_strategy='truncate+insert'
) }}
select * from {{ ref('source_data') }}
Эта стратегия безопасна для heap-таблиц, поскольку команда TRUNCATE удаляет все строки, не затрагивая структуру таблицы, индексы, права доступа и зависимые объекты. Для партиционированных таблиц TRUNCATE удаляет данные из всех секций. Для таких таблиц рекомендуется использовать delete+insert с опцией incremental_predicates, отфильтрованным по ключу партиционирования.
{{ config(
materialized='incremental',
incremental_strategy='microbatch',
event_time='created_at',
begin='2024-01-01',
batch_size='month'
) }}
select * from {{ ref('source_data') }}
Стратегия microbatch использует конфигурацию пакетов (batch configuration) и столбец event_time, как описано в документации dbt microbatch documentation. Для каждого пакета выполняется операция DELETE по окну event_time, после чего выполняется INSERT из временной таблицы.
Параметр unique_key не требуется, границы пакетов определяются окном event_time.
Для ссылки на целевую таблицу используйте DBT_INTERNAL_DEST в incremental_predicates следующим образом:
{{ config(
materialized='incremental',
incremental_strategy='microbatch',
event_time='created_at',
begin='2024-01-01',
batch_size='month',
incremental_predicates=["DBT_INTERNAL_DEST.status != 'archived'"]
) }}
select * from {{ ref('source_data') }}
Адаптер заменяет этот псевдоним (alias) реальным именем таблицы (так как в DELETE отсутствует оператор USING).
Ограничения
Адаптер поддерживает контракты моделей dbt (model contracts) и определения ограничений (constraints).
| Ограничение | Поддерживается | Принудительно применяется |
|---|---|---|
check |
Да |
Да |
not_null |
Да |
Да |
unique |
Да |
Нет |
primary_key |
Да |
Нет |
foreign_key |
Да |
Нет |
|
ПРИМЕЧАНИЕ
Если настроен параметр contract.enforced=true, dbt-greengage выводит предупреждение, поскольку полное применение контрактов не гарантируется для всех типов ограничений.
|
Конфигурация хранения (AO/heap)
Greengage DB поддерживает как heap-таблицы, так и таблицы Append-Optimized (AO) с построчным и колоночным хранением данных.
Параметры AO-хранения настраиваются непосредственно в конфигурации модели и могут быть двух типов:
-
AO-таблицы с построчной ориентацией (row-oriented AO tables) подходят для нагрузок с частым доступом к отдельным строкам или смешанных сценариев OLTP/аналитической обработки.
Пример:
{{ config( materialized='table', appendoptimized=true, orientation='row' ) }} -
AO-таблицы с колоночной ориентацией (column-oriented AO tables) рекомендуются для аналитических фактных таблиц и нагрузок с интенсивным выполнением агрегаций.
Пример:
{{ config( materialized='table', appendoptimized=true, orientation='column', compresstype='ZSTD', compresslevel=4 ) }}
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
appendoptimized |
Создает AO-таблицу |
true |
orientation |
Тип хранения: |
column |
compresstype |
Тип сжатия |
ZSTD |
compresslevel |
Уровень сжатия от 1 до 9 |
4 |
blocksize |
Размер блока в байтах |
32768 |
Распределение
Адаптер поддерживает следующие политики распределения:
-
DISTRIBUTED BY— распределяет строки в соответствии с хеш-значениями одного или нескольких столбцов.Пример:
{{ config( materialized='table', distributed_by='customer_id' ) }} -
DISTRIBUTED REPLICATED— копирует всю таблицу на все сегменты.Пример:
{{ config( materialized='table', distributed_replicated=true ) }} -
DISTRIBUTED RANDOMLY— если политика распределения не настроена, адаптер генерирует случайное распределение.Пример:
{{ config(materialized='table') }}
Партиционирование
Адаптер DBT Greengage DB поддерживает:
-
необработанные определения партиционирования (raw partition definitions);
-
параметризованные партиции
RANGE; -
параметризованные партиции
LIST.
Greengage DB 6 не поддерживает использование CREATE TABLE AS совместно с PARTITION BY. Из-за этого ограничения dbt-greengage автоматически переключается на двухэтапный процесс:
CREATE TABLE ...
INSERT INTO ...
Поэтому для партиционированных таблиц требуется явное определение столбцов с помощью параметра fields_string.
Параметр raw_partition позволяет передать полное выражение партиционирования.
| Параметр | Конфигурация | Описание |
|---|---|---|
fields_string |
config.get() |
Определения столбцов для |
raw_partition |
GreengageConfig |
Полное выражение |
partition_type |
GreengageConfig |
|
partition_column |
GreengageConfig |
Столбец, по которому выполняется партиционирование |
partition_start |
config.get() |
Начальное значение для партиции |
partition_end |
config.get() |
Конечное значение для партиции |
partition_every |
config.get() |
Интервал для партиций |
partition_values |
config.get() |
Выражение |
default_partition_name |
config.get() |
Имя партиции по умолчанию (по умолчанию: |
{% set fields_string %}
id int4 null,
event_date timestamp null
{% endset %}
{% set raw_partition %}
PARTITION BY RANGE (event_date)
(
START ('2024-01-01'::timestamp) INCLUSIVE
END ('2025-01-01'::timestamp) EXCLUSIVE
EVERY (INTERVAL '1 month'),
DEFAULT PARTITION other
)
{% endset %}
{{ config(
materialized='table',
distributed_by='id',
fields_string=fields_string,
raw_partition=raw_partition
) }}
{{ config(
materialized='table',
distributed_by='id',
fields_string=fields_string,
partition_type='RANGE',
partition_column='event_date',
partition_start='2024-01-01',
partition_end='2025-01-01',
partition_every='1 month'
) }}
{{ config(
materialized='table',
distributed_by='id',
fields_string=fields_string,
partition_type='LIST',
partition_column='region',
partition_values="PARTITION eu VALUES ('EU'), PARTITION us VALUES ('US')"
) }}
Внешние таблицы и загрузка данных
Адаптер предоставляет макросы для создания и удаления внешних таблиц Greengage DB. Поддерживаются протоколы gpfdist и PXF.
gpfdist предоставляет доступ к flat-файлам (flat files) с ETL-хоста (gpfdist://, gpfdists://), поддерживает форматы TEXT и CSV и позволяет указывать несколько URL-адресов в одном выражении LOCATION для параллельной загрузки данных между сегментами.
PXF подключается к внешним источникам данных (HDFS, HBase, Hive, S3, JDBC) через URL вида pxf://. Он поддерживает форматы TEXT, CSV и CUSTOM (с использованием FORMATTER). Для PXF требуется только один URL в каждом выражении LOCATION. Использование нескольких адресов не допускается.
Управление внешними таблицами осуществляется с помощью служебных макросов (utility macros), которые обычно используются в:
-
pre-hook;
-
post-hook;
-
dbt run-operation.
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
relation |
Целевое отношение (relation) внешней таблицы (схема и имя таблицы), которое необходимо создать. Этот параметр является обязательным |
— |
fields_string |
Определения столбцов для внешней таблицы в SQL-формате (например, |
— |
location |
Расположение источника внешних данных. Может быть одним URL или списком URL. Несколько URL поддерживаются только для источников gpfdist. Этот параметр является обязательным |
— |
format |
Формат данных во внешней таблице. Поддерживаются значения |
TEXT |
formatter |
Имя пользовательского форматтера, используемого для обработки данных в формате |
— |
delimiter |
Символ, используемый для разделения полей в строке данных |
, |
null_string |
Строковое значение, которое интерпретируется как |
— |
escape |
Символ экранирования специальных символов. Для отключения экранирования укажите значение |
— |
header |
Указывает, содержит ли первая строка файла заголовок с именами столбцов |
false |
encoding |
Кодировка символов исходных данных |
UTF8 |
on_clause |
Определяет, где выполняется обработка данных: на всех сегментах ( |
— |
log_errors |
Включает логирование строк, которые не удалось обработать из-за ошибок формата или преобразования данных |
false |
segment_reject_limit |
Максимальное количество или доля ошибочных записей, после достижения которых загрузка будет прервана |
— |
segment_reject_limit_type |
Единица измерения для параметра |
rows |
execute |
Определяет, следует ли выполнить сгенерированный SQL-запрос немедленно ( |
true |
{% set ext_relation = api.Relation.create(schema='ext_schema', identifier='ext_orders') %}
{{ create_external_table(
relation=ext_relation,
fields_string='order_id INTEGER, order_date DATE, amount NUMERIC',
location="'gpfdist://etl-host:8080/orders*.csv'",
format='CSV',
delimiter=',',
header=true,
log_errors=true,
segment_reject_limit=100,
segment_reject_limit_type='rows'
) }}
{{ create_external_table(
relation=ext_relation,
fields_string='id INTEGER, name TEXT, value NUMERIC',
location=[
"'gpfdist://host1:8080/data.csv'",
"'gpfdist://host2:8081/data.csv'"
],
format='CSV',
header=true
) }}
{{ create_external_table(
relation=ext_relation,
fields_string='event_id INTEGER, payload TEXT',
location="'pxf://data/events?PROFILE=hdfs:text'",
format='TEXT',
delimiter='|'
) }}
{{ create_external_table(
relation=ext_relation,
fields_string='row_key TEXT, cf1_col1 TEXT, cf1_col2 TEXT',
location="'pxf://hbase_table?PROFILE=HBase'",
format='CUSTOM',
formatter='pxfwritable_import'
) }}
Адаптер также поддерживает внешние таблицы с возможностью записи.
Пример:
{% set ext_relation = api.Relation.create(schema='ext_schema', identifier='ext_export') %}
{{ create_writable_external_table(
relation=ext_relation,
fields_string='id INTEGER, name TEXT',
location="'gpfdist://etl-host:8080/output.csv'",
format='CSV',
distributed_by='id'
) }}
Материализованные представления
Адаптер dbt-greengage предоставляет собственную реализацию материализации materialized_view со встроенным управлением индексами.
В отличие от обычных представлений, материализованные представления физически хранят результаты запроса на диске. Поэтому материализованное представление необходимо обновлять при изменении исходных данных.
При создании материализованного представления адаптер выполняет оператор CREATE MATERIALIZED VIEW … AS … и автоматически создает все индексы, определенные в конфигурации модели.
При последующих запусках dbt run адаптер сравнивает текущее определение материализованного представления с требуемой конфигурацией. Если изменились только определения индексов, адаптер выполняет целевое обновление, удаляя и создавая заново только затронутые индексы. Если изменился базовый запрос или материализованное представление необходимо пересоздать, адаптер заменяет объект целиком.
Операции refresh, rename, drop, describe и сравнение конфигураций наследуются от dbt-postgres.
Пример:
{{ config(
materialized='materialized_view',
indexes=[
{'columns': ['user_id'], 'type': 'btree', 'unique': true},
{'columns': ['order_count'], 'type': 'bitmap'},
]
) }}
select
user_id,
count(*) as order_count,
sum(amount) as total_amount
from {{ ref('orders') }}
group by user_id
Индексы также могут быть настроены в dbt_project.yml или schema.yml:
models:
- name: user_order_summary
config:
materialized: materialized_view
indexes:
- columns: ['user_id']
type: btree
unique: true
- columns: ['order_count']
type: bitmap
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
columns |
list |
Список столбцов, включенных в индекс. Этот параметр является обязательным |
— |
unique |
bool |
Создает уникальный индекс |
false |
type |
string |
Используемый метод индекса |
btree |
|
ПРИМЕЧАНИЕ
Greengage DB не поддерживает CREATE OR REPLACE MATERIALIZED VIEW. В результате материализованные представления рассматриваются как отношения, которые можно переименовывать, но нельзя заменять на месте. Если требуется полное пересоздание, адаптер удаляет и заново создает материализованное представление вместо выполнения операции замены существующего объекта.
|
Индексы
Адаптер предоставляет встроенную поддержку создания индексов через макрос greengage__get_create_index_sql.
Если определение индекса указано в конфигурации модели, адаптер автоматически проверяет конфигурацию, генерирует соответствующий SQL-оператор и создает индекс в процессе материализации. Имена индексов генерируются автоматически.
Сгенерированный SQL соответствует следующему шаблону:
CREATE [UNIQUE] INDEX "<generated_name>"
ON <relation>
[USING <index_type>]
(<columns>)
Индексы используются совместно с материализованными представлениями (через параметр indexes) и доступны для вызова из макросов через get_create_index_sql(relation, index_dict).
| Тип индекса | Описание |
|---|---|
btree |
Тип индекса по умолчанию. Рекомендуется для предикатов равенства, операций сортировки и диапазонных запросов |
bitmap |
Специфичный для Greengage DB тип индекса, оптимизированный для столбцов с низкой кардинальностью (low cardinality), таких как флаги состояния, категории и другие столбцы с ограниченным количеством различных значений |
hash |
Оптимизирован для точного поиска совпадений с использованием операторов равенства |
gist |
Индекс обобщенного дерева поиска (Generalized Search Tree), подходящий для геопространственных данных, полнотекстового поиска и других сложных типов данных |
spgist |
Индекс GiST с пространственным разбиением (Space-Partitioned GiST), предназначенный для IP-адресов, телефонных номеров и иерархических данных |
gin |
Обобщенный инвертированный индекс (Generalized Inverted Index), обычно используемый для массивов, документов JSONB и полнотекстового поиска |
brin |
Индекс диапазонов блоков (Block Range Index), предназначенный для очень больших таблиц, в которых данные естественным образом упорядочены; например, фактных таблиц на основе временных меток (timestamp) |
Расширения
Адаптер предоставляет набор макросов Jinja для управления расширениями базы данных в Greengage DB.
Эти макросы могут выполняться из:
-
моделей dbt;
-
хуков on-run-start и on-run-end;
-
pre-hook и post-hook;
-
команд
dbt run-operation.
Пример создания расширения базы данных:
{{ create_extension(
extension_name='hstore',
schema='public',
version='1.4',
cascade=true
) }}
Сгенерированный SQL:
CREATE EXTENSION "hstore"
WITH SCHEMA "public"
VERSION '1.4'
CASCADE
Создание расширения только в том случае, если оно еще не существует:
{{ create_extension_if_not_exists(
extension_name='postgis'
) }}
Сгенерированный SQL:
CREATE EXTENSION IF NOT EXISTS "postgis"
Этот макрос является идемпотентным и может безопасно выполняться несколько раз, что позволяет использовать его в автоматизированных пайплайнах.
Удаление существующего расширения:
{{ drop_extension(
extension_name='hstore',
if_exists=true,
cascade=true
) }}
Сгенерированный SQL:
DROP EXTENSION IF EXISTS "hstore" CASCADE
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
extension_name |
string |
Имя расширения, которое необходимо создать или удалить, например |
— |
schema |
string |
Схема, в которой должно быть установлено расширение. Генерирует оператор |
— |
version |
string |
Конкретная версия расширения для установки |
— |
cascade |
boolean |
Автоматически устанавливает или удаляет зависимые объекты, если это поддерживается расширением |
false |
if_exists |
boolean |
Добавляет оператор |
true |
execute |
boolean |
Немедленно выполняет сгенерированный SQL. Если установлено значение |
true |
Снепшоты
Адаптер dbt-greengage поддерживает отслеживание изменений на основе снепшотов для сценариев Slowly Changing Dimension (SCD). Обработка снепшотов использует ту же реализацию, что и dbt-postgres, основанную на операторах UPDATE … FROM и INSERT, а не на SQL MERGE, который недоступен в Greengage DB.
Поддерживаются следующие стратегии создания снимков:
-
timestamp— создает новую версию снимка при изменении значения указанного столбца с временной меткой (например,updated_at); -
check— создает новую версию снимка при изменении значений одного или нескольких отслеживаемых столбцов.
Адаптер также поддерживает параметр hard_deletes (доступен начиная с dbt 1.9), который позволяет отслеживать записи, удаленные из исходного набора данных.
{% snapshot orders_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='order_id',
strategy='timestamp',
updated_at='updated_at'
)
}}
select * from {{ source('raw', 'orders') }}
{% endsnapshot %}
{% snapshot products_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='product_id',
strategy='check',
check_cols=['name', 'price', 'status']
)
}}
select * from {{ source('raw', 'products') }}
{% endsnapshot %}
Если параметр hard_deletes установлен в значение new_record, удаленные записи фиксируются как новая строка со значением dbt_is_deleted = True.
{% snapshot customers_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='customer_id',
strategy='timestamp',
updated_at='updated_at',
hard_deletes='new_record'
)
}}
select * from {{ source('raw', 'customers') }}
{% endsnapshot %}
Специфика работы снепшотов в Greengage DB
Greengage DB 6 основан на PostgreSQL 9 и имеет особенности разрешения типов (type resolution) для строковых литералов в запросах UNION ALL.
Чтобы избежать проблем компиляции снепшотов, адаптер автоматически добавляет явные приведения типов ::text в вспомогательный SQL-код (helper SQL) для снепшотов.
Это необходимо для обеспечения совместимости с будущими версиями Greengage DB.
Миграция
Миграция с dbt-greenplum
Адаптер dbt-greengage разработан с учетом максимальной совместимости с существующими проектами dbt-greenplum. Поэтому миграция не требует больших изменений конфигурации.
-
Обновите тип адаптера в profiles.yml:
type: greengage -
Установите адаптер dbt-greengage (либо установив сервис DBT, либо вручную) и удалите старый пакет адаптера:
$ pip uninstall dbt-greenplum $ pip install dbt-greengage -
Замените
appendonlyнаappendoptimizedв конфигурациях моделей (рекомендуется). Параметрappendonly, используемый ранее, по-прежнему поддерживается для обеспечения обратной совместимости, поэтому существующие проекты продолжают работать без изменений. Однако рекомендуется использоватьappendoptimized, поскольку он соответствует терминологии Greengage DB.{{ config( appendoptimized=true, orientation='column' ) }} -
Проверьте инкрементальные модели (incremental models) и удалите стратегию
merge, если она настроена. Greengage DB не поддерживает SQLMERGE, поэтому инкрементальная стратегияmergeнедоступна. Если она настроена, адаптер выдаст ошибку валидации во время выполнения. Вместо этого вы можете использовать одну из поддерживаемых альтернатив. -
Проверьте конфигурацию пользовательских схем. В отличие от некоторых других адаптеров, dbt-greengage не добавляет автоматически
target.schemaк именам пользовательских схем, заданным через свойствоschema:. Если ваш проект использует конкатенацию (объединение) имен схем, после миграции необходимо проверить и скорректировать определения схем.
Адаптер наследует механизм управления подключениями от dbt-postgres, что означает, что все стандартные параметры подключения остаются без изменений. Существующие настройки можно использовать повторно без модификаций.
Миграция с dbt-postgres
Поскольку адаптер dbt-greengage построен поверх dbt-postgres и поддерживает ту же модель конфигурации подключения, для миграции с dbt-postgres на dbt-greengage достаточно установить адаптер и изменить его тип в конфигурации.
Обновите тип адаптера в конфигурационном файле profiles.yml:
type: greengage