1

我正在尝试运行引用现有上游表模型的下游模型。这是失败的,因为下游模型试图在下游模式中找到上游模型。

也许它与如何在 DBT Cloud 中设置环境/模式有关?或者,也许我错过了一些简单的东西,但对于我的生活,我找不到它。

我在下面创建了最简单的复制品。

主机:DBT云

数据库:雪花

环境:

  • upstream_model 构建在名为 upstream 的 dbt 云环境中,schema = 'upstream_model'
  • 下游模型构建在名为下游的dbt云环境中,schema = 'downstream_model'

DBT项目结构

dbt_project.yml

name: 'repro'
config-version: 2
require-dbt-version: 0.17.2
version: '2.0.0'

...

models:
    repro:
        repro_downstream:
          +materialized: ephemeral

        repro_upstream:
          +materialized: ephemeral

    

当上游模型物化 = 'ephemeral' 时,它会工作并将上游模型用作 CTE: Ephemeral materialization

当上游模型实现 = 'table' 时,它会失败,因为它在下游模型的模式中查找上游模型: 创建表失败

上游.yml:

version: 2
models:
    - name: upstream_model

上游模型.sql:

{{
    config(
        materialized='**table**'
    )
}}

With model as (
    SELECT 1
)
SELECT * FROM model

下游.yml:

version: 2

models:
    - name: downstream_model

下游模型.sql:

{{
    config(
        materialized='table'
    )
}}

With model as (
    SELECT * FROM
    {{ ref('upstream_model') }}
)

SELECT * FROM model
4

2 回答 2

1

感谢您详细说明复制案例。但是,我无法重现您描述的错误。我看不到您在哪里设置自定义schema+ upstream_modeldownstream_model我想知道这是否是问题所在,因为听起来您希望这两个模型生活在不同的模式中。

以下对我来说很好:

上游模型.sql

{{
    config(
        materialized='table',
        schema = 'upstream'
    )
}}

With model as (
    SELECT 1
)
SELECT * FROM model

下游模型.sql

{{
    config(
        materialized='table',
        schema = 'downstream'
    )
}}

With model as (
    SELECT * FROM
    {{ ref('upstream_model') }}
)

SELECT * FROM model

当我dbt run

  create  table "jerco"."dbt_jcohen_upstream"."upstream_model"
  as (
    

With model as (
    SELECT 1
)
SELECT * FROM model
  );
  create  table "jerco"."dbt_jcohen_downstream"."downstream_model"
  as (
    

With model as (
    SELECT * FROM
    "jerco"."dbt_jcohen_upstream"."upstream_model"
)

SELECT * FROM model
  );
于 2020-08-20T19:21:34.790 回答
0

万一其他人偶然发现了这一点,我刚刚得知我正在错误地使用 DBT 云环境。它们并不真正支持模型在环境之间进行对话。所以我需要将我的模型整合到一个环境中,然后使用“自定义模式”以及覆盖generate_schema_name宏来实现我的模式命名目标。

自定义模式:https ://docs.getdbt.com/docs/building-a-dbt-project/building-models/using-custom-schemas/

于 2020-08-20T19:22:10.963 回答