Skip to content

自定义数据库

关于命名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的数据库中的特定模型。

{{ config(database="jaffle_shop") }}

select * from ...

generate_database_name

New in v0.16.0

为模型生成的数据库名称由名为generate_database_name的宏控制。可以在dbt项目中重写此宏,以更改dbt生成模型数据库名称的方式。此宏的工作原理与generate_schema_name宏类似。

要覆盖dbt的数据库生成名称,请在自己的dbt项目中创建一个名为generate_database_name的宏。generate_database_name宏接受两个参数:

  1. 模型配置中提供的自定义数据库
  2. 正在为其生成自定义数据库的节点

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运行中执行的查询计费,即使某些模型被配置为在其他项目中构建。