Пользовательские базы данных
Разные хранилища данных используют разные названия для логических баз данных. Информация в этом документе охватывает "базы данных" в Snowflake, Redshift и Postgres; "проекты" в BigQuery; и "каталоги" в Databricks Unity Catalog.
Значения project
и database
взаимозаменяемы в конфигурациях проектов BigQuery.
Настройка пользовательских баз данных
Логическая база данных, в которую строятся модели dbt, может быть настроена с помощью конфигурации модели database
. Если эта конфигурация не указана для модели, то dbt будет использовать базу данных, настроенную в активной цели из вашего файла profiles.yml
. Если конфигурация database
указана для модели, то dbt построит модель в указанной базе данных.
Конфигурация database
может быть указана для групп моделей в файле dbt_project.yml
или для отдельных моделей в SQL-файлах моделей.
Настройка переопределений базы данных в dbt_project.yml
:
Эта конфигурация изменяет все модели в проекте jaffle_shop
, чтобы они строились в базе данных под названием jaffle_shop
.
name: jaffle_shop
models:
jaffle_shop:
+database: jaffle_shop
# Для пользователей BigQuery:
# project: jaffle_shop
Настройка переопределений базы данных в файле модели
Эта конфигурация изменяет конкретную модель, чтобы она строилась в базе данных под названием jaffle_shop
.
{{ config(database="jaffle_shop") }}
select * from ...
generate_database_name
Имя базы данных, генерируемое для модели, контролируется макросом под названием generate_database_name
. Этот макрос может быть переопределен в проекте dbt для изменения способа генерации имен баз данных для моделей. Этот макрос работает аналогично макросу generate_schema_name.
Чтобы переопределить генерацию имен баз данных в dbt, создайте макрос с именем generate_database_name
в вашем собственном проекте dbt. Макрос generate_database_name
принимает два аргумента:
- Пользовательская база данных, указанная в конфигурации модели
- Узел, для которого генерируется пользовательс кая база данных
Стандартная реализация generate_database_name
просто использует указанную конфигурацию database
, если она присутствует, в противном случае используется база данных, настроенная в активной target
. Эта реализация выглядит следующим образом:
{% macro generate_database_name(custom_database_name=none, node=none) -%}
{%- set default_database = target.database -%}
{%- if custom_database_name is none -%}
{{ default_database }}
{%- else -%}
{{ custom_database_name | trim }}
{%- endif -%}
{%- endmacro %}
💡 Используйте управление пробелами Jinja, чтобы упорядочить ваши макросы!
Когда вы изменяете макросы в вашем проекте, вы можете заметить лишние пробелы в вашем коде в папке target/compiled
.
Вы можете удалить ненужные пробелы и строки с помощью управления пробелами Jinja, используя знак минус. Например, используйте {{- ... -}}
или {%- ... %}
вокруг определений ваших макросов (таких как {%- macro generate_schema_name(...) -%} ... {%- endmacro -%}
).
Управление различными поведениями в пакетах
См. документацию по макросу dispatch
: "Управление различными глобальными переопределениями в пакетах"
Соображения
BigQuery
Когда dbt открывает соединение с BigQuery, оно будет использовать project_id
, определенный в вашей активной цели profiles.yml
. Этот project_id
будет выставлен на оплату за запросы, выполненные в ходе выполнения dbt, даже если некоторые модели настроены для построения в других проектах.