自定义数据库
关于命名A word on naming
不同的数据仓库对`逻辑数据库`有不同的名称。本文档中的信息包括Snowflake、Redshift和Postgres上的“数据库”,以及BigQuery上的“项目”。
“project”和“database”在BigQuery项目配置中是可互换的。
配置自定义数据库¶
dbt模型内置的逻辑数据库可以使用“数据库”模型配置进行配置。如果此配置未提供给模型,则dbt将使用profiles.yml文件中活动目标中配置的数据库。如果为模型提供了“数据库”配置,那么dbt将把模型构建到配置的数据库中。
“数据库”配置可以提供给dbt_project.yml文件中的模型组,也可以提供给模型SQL文件中的单个模型。
在dbt_project.yml中配置数据库重写:¶
此配置将更改jaffle_shop项目中的所有模型,以将其构建到名为jaffle_shop的数据库中。
name: jaffle_shop
models:
my_project:
+database: jaffle_shop
# For BigQuery users:
# project: jaffle_shop
在模型文件中配置数据库重写¶
此配置会更改要构建到名为jaffle_shop的数据库中的特定模型。
generate_database_name¶
为模型生成的数据库名称由名为generate_database_name的宏控制。可以在dbt项目中重写此宏,以更改dbt生成模型数据库名称的方式。此宏的工作原理与generate_schema_name宏类似。
要覆盖dbt的数据库生成名称,请在自己的dbt项目中创建一个名为generate_database_name的宏。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 %}
考虑因素¶
BigQuery¶
当dbt打开BigQuery连接时,它将使用活动的profiles.yml目标中定义的project_id来执行此操作。这个project_id将为在dbt运行中执行的查询计费,即使某些模型被配置为在其他项目中构建。