问题描述
我正在尝试遵循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)中:
- 在目标架构中构建所有模型,例如,忽略自定义架构配置。
或者,您可以更改第一个代码段的逻辑,以对您的特定设置进行更多自定义。