我在两个 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”。但是,目标是让它们具有相同的数据集名称(在两个不同的项目中)
一种只需最少更改的解决方案可以是:
customers.sql
模型和快照重命名为 customers_stg.sql
enabled
配置到两者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') }}