不同 GCP 项目之间的资源命名存在 DBT 冲突

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

我在两个 GCP 项目(ProjectA 和 ProjectB)中将 dbt 与 BigQuery 结合使用。我的所有模型目前都在 ProjectA 中实现和执行。现在,我尝试在 ProjectB 中执行相同的模型,该模型与 ProjectA 具有相同的结构,除了一个模型,该模型是 ProjectA 中的快照,但不是 ProjectB 中的快照。

但是,我遇到了以下错误:

To fix this, change the name of one of these resources:
model.ecom.customers (models/semantic/customers.sql)
snapshot.ecom.customers (snapshots/semantic/customers.sql)

我想将这些资源保留在同一数据集(语义)中,但跨不同的项目。有没有办法实现这个目标?

在不同的数据集中执行时它可以成功运行。例如,“customers.sql”(快照)的架构名为“semantic_snp”,“customers.sql”的架构标记为“semantic”。但是,目标是让它们具有相同的数据集名称(在两个不同的项目中)

google-cloud-platform google-bigquery dbt
1个回答
0
投票

一种只需最少更改的解决方案可以是:

  1. 将当前
    customers.sql
    模型和快照重命名为
    customers_stg.sql
  2. 根据 target.project 添加
    enabled
    配置到两者
  3. 在模型文件夹中创建模型
    customers.sql
    ,填充参考
    customers_stg

快照/语义/customers_stg.sql:

{% snapshot customers_stg %}

{{
    config(
      target_schema=...,
      unique_key=...,
      strategy=...,

      enabled=target.project == 'ProjectA',
    )
}}

SELECT ...

{% endsnapshot %}

模型/语义/customers_stg.sql:

{{
    config(
        enabled=target.project == 'ProjectB'
    )
}}

SELECT ...

模型/语义/customers.sql:

SELECT * FROM {{ ref('customers_stg') }}
© www.soinside.com 2019 - 2024. All rights reserved.