dbt:如何在没有生产模式前缀的情况下将源表写入它们自己的模式

  • 本文关键字:模式 情况下 自己的 前缀 dbt dbt
  • 更新时间 :
  • 英文 :


我正在尝试遵循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前缀,而不考虑环境

相关内容