我正在尝试遵循Gitlab的文件夹和dbt结构。特别是对于源,他们为每个源表都有一个单独的模式。我的生产模式称为分析,我的生产数据库称为分析。当我在生产中运行此程序时,dbt将创建analytics.analytics_sfdc而不是analytic.sfdc。我如何设置此程序,以便将源表写入analytics/sfdc?
谢谢!
模式前缀/后缀设置是dbt中的默认设置。您可以通过更改项目中的generate_schema_name
宏来覆盖它,如下所述。
这是宏的默认版本的代码:
{% 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(:
- 在目标架构中构建所有模型,如中所示,忽略自定义架构配置
或者,您可以更改第一个代码片段的逻辑,以便对您的特定设置进行更自定义的操作。
{% macro generate_schema_name(custom_schema_name, node) -%}
{%- set default_schema = target.schema -%}
{%- if custom_schema_name is none -%}
{{ default_schema }}
{%- else -%}
{{ custom_schema_name | trim }}
{%- endif -%}
{%- endmacro %}
我使用以上作为我的宏/generate_schema_name.sql来消除dbt前缀,而不考虑环境