dbt无法创建具有相同数据库表示形式的两个资源

问题描述

我的处境如下:

我的dbt项目中有两个模型

  1. 模型A
{{ config(
    materialized='ephemeral',alias='A_0001',schema=var('xxx_yyy_dataset')
) }}
  1. model-B
{{ config(
    materialized='ephemeral',alias='B_0002',schema=var('xxx_yyy_dataset')
) }}

在与xxx_yyy_dataset.Table_DDD相同的架构中,这些正在逐步实现

{{ config(
    materialized='incremental',alias='Table_DDD',schema=var('xxx_yyy_dataset')
) }}
SELECT * FROM {{ref('A_0001')}}
UNION ALL
SELECT * FROM {{ref('B_0002')}}

这工作正常,正在将记录提取到目标表中。

现在,我介绍了另一个模型-Model-C ind不同的包装 C型

{{ config(
    materialized='incremental',schema=var('xxx_yyy_dataset')
) }}

这给了我以下错误

$ dbt compile --profiles-dir=profile --target ide
Running with dbt=0.16.0
Encountered an error:
Compilation Error
  dbt found two resources with the database representation "xxx_yyy_dataset.Table_DDD".
  dbt cannot create two resources with identical database representations. To fix this,change the "schema" or "alias" configuration of one of these resources:
  - model.eplus_rnc_dbt_project.conrol_outcome_joined (models/controls/payment/fa-join/conrol_outcome_joined.sql)
  - model.eplus_rnc_dbt_project.dq_control_outcome_joined (models/controls/dq/dq-join/dq_control_outcome_joined.sql)

我为自定义宏配置了宏,如下所示:

{% 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 }}
    {%- endif -%}
{%- endmacro %}


{% macro generate_alias_name(custom_alias_name=none,node=none) -%}
    {%- if custom_alias_name is none -%}
        {{ node.name }}
    {%- else -%}
        {{ custom_alias_name | trim }}
    enter code here
    {%- endif -%}
{%- endmacro %}

解决方法

dbt在这里工作!

您有两个共享完全相同配置的模型-conrol_outcome_joineddq_control_outcome_joined

这意味着他们都将尝试写入同一表:xxx_yyy_dataset.Table_DDD

dbt在这里(正确地)抛出一个错误以避免出现问题。

如错误消息所示,您应该更新您的模型之一以使用其他模式或别名,以便在BigQuery项目中将其表示为单独的表。