【问题标题】:dbt: How Can I Write Source Tables Into Their Own Schema Without Production Schema Prefix?dbt:如何在没有生产模式前缀的情况下将源表写入自己的模式?
【发布时间】:2021-02-16 11:30:28
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: dbt


    【解决方案1】:

    模式前缀/后缀设置是 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):
      • 在目标架构中构建所有模型,如忽略自定义架构配置。

    或者,您可以更改第一个代码 sn-p 的逻辑,以根据您的特定设置执行更自定义的操作。

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      相关资源
      最近更新 更多