DBT 中使用变量的文件夹级别架构配置

问题描述 投票:0回答:1

我在 DBT 中有一个用例,我需要根据文件夹结构设置模式名称,因为有很多文件夹和很多模型。我已经在 DBT_project.yml 文件中完成了该文件夹级别,并且工作正常。但我想让它更通用一些,并将值分配给变量,然后使用该变量来填充架构名称。

由于 DBT 不支持引用 DBT_project.yml 中定义的变量,因此我无法使用特定于文件夹的变量分配架构。除了 DBT_project.yml 之外,DBT 不支持在资源/文件夹级别进行配置。

对此有什么建议吗?有没有办法在 DBT_project.yml 之外定义变量并在 YML 文件中使用它或配置除 DBT_project.yml 之外的资源/文件夹级别。

我尝试在模型级别和文件夹级别配置架构,效果很好。但是在project.yml中定义变量然后使用is作为文件夹级别是行不通的。

https://stackoverflow.com/questions/75698936/how-to-reference-variables-defined-in-dbt-project-yml

同样的问题
google-bigquery dbt
1个回答
0
投票

您可以通过自定义 dbt 生成模式名称的方式来解决该问题。为此,您需要将

generate_schema_name.sql
宏放入宏文件夹中(请参阅详细信息此处)。

在那里,您可以做两件事:

  1. 使用
    fqn
    方法访问模型的完整路径。 fqn 包含路径值列表:
    [project, sub_folder, sub_sub_folder, ..., model_name]
    。详情请看这里
  2. 访问
    dbt_project.yml
  3. 中定义的变量

解决方案

dbt_project.yml

vars:
    schema_names: {"folder_1": "schema_1", "folder_2": "schema_2"}

macros/generate_schema_name.sql

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

    {%- set default_schema = target.schema -%}

    {%- if node.fqn|length > 2 -%}
        {{ default_schema }}_{{ var("schema_names")[node.fqn[1]] | trim }}

    {%- else -%}

        {{ default_schema }}

    {%- endif -%}

{%- endmacro %}
© www.soinside.com 2019 - 2024. All rights reserved.