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

Posted

技术标签:

【中文标题】dbt 无法创建具有相同数据库表示的两个资源【英文标题】:dbt cannot create two resources with identical database representations 【发布时间】:2020-08-31 20:08:43 【问题描述】:

我这里的情况如下:

我的 dbt 项目中有两个模型

    模型-A
 config(
    materialized='ephemeral',
    alias='A_0001',
    schema=var('xxx_yyy_dataset')
) 
    模型-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',
    alias='Table_DDD',
    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 %

【问题讨论】:

嗨 Manoj — 通常我们建议不要匿名您的表名。它可能会引入额外的错误,从而掩盖根本问题!例如,这里的错误信息与示例代码不匹配,这使得调试变得更加困难。 【参考方案1】:

dbt 在这里工作!

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

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

dbt (正确地)在此处抛出错误以避免出现问题。

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

【讨论】:

这是我的要求,新模型 - C 必须将记录写入(插入)到同一个表中。 啊,那你从根本上打破了 dbt 的范式——一个模型由数据库中的一个表或视图表示。

以上是关于dbt 无法创建具有相同数据库表示的两个资源的主要内容,如果未能解决你的问题,请参考以下文章

[DBT-08001] 无法检查可用内存。

DBT 工具:运行时错误编译错误无法呈现

如果它们具有相同的标题,如何组合数据表但将列添加在一起? (需要指导或资源)

使用 dbt 的物化视图与表

SQL Power Architect Mondrian Schema:创建两个具有相同维度的多维数据集

OBIEE 创建自定义联接以提取两个相同但具有不同数据的列