dbt:如何在没有生产模式前缀的情况下将源表写入其自身的模式?

问题描述

我正在尝试遵循Gitlab的文件夹和dbt结构。专门针对源,他们为每个源表都有一个单独的架构。我的生产模式称为分析,而我的生产数据库称为分析。在生产环境中运行时,dbt将创建analytics.analytics_sfdc而不是analytics.sfdc。我该如何设置以便将源表写入analytics.sfdc?

谢谢!

解决方法

模式前缀/后缀设置是dbt中的默认设置。您可以通过更改项目中的generate_schema_name宏来进行覆盖,如here所述。

这是宏的默认版本的代码:

{% macro generate_schema_name(custom_schema_name,node) -%}

    {%- set default_schema = target.schema -%}
    {%- if custom_schema_name is none -%}

        {{ default_schema }}

    {%- else -%}

        {{ default_schema }}_{{ custom_schema_name | trim }}

    {%- endif -%}

{%- endmacro %}`

您可以在其中看到前缀逻辑。要覆盖它,您只需要在项目中创建宏的新版本即可。

假设您的生产环境是一个名为“ prod”的目标,则只需添加以下内容即可:

{% macro generate_schema_name(custom_schema_name,node) -%}
    {{ generate_schema_name_for_env(custom_schema_name,node) }}
{%- endmacro %}

根据文档,这将表现如下,这似乎是您想要的:

  • 在生产中:
    • 如果提供了定制模式,则模型的模式名称应与定制模式匹配,而不是与目标模式串联。 如果未提供自定义架构,则模型的架构名称应与目标架构匹配。
  • 在其他环境(例如dev或qa)中:
    • 在目标架构中构建所有模型,例如,忽略自定义架构配置。

或者,您可以更改第一个代码段的逻辑,以对您的特定设置进行更多自定义。