1

既存の上流テーブル モデルを参照する下流モデルを実行しようとしています。ダウンストリーム モデルがダウンストリーム スキーマでアップストリーム モデルを見つけようとしているため、これは失敗しています。

環境/スキーマがDBTクラウドでどのように設定されているかということと関係があるのでしょうか? または、単純なものが欠けているのかもしれませんが、私の人生ではそれを見つけることができません。

以下に、最も簡単な再現を作成しました。

ホスト: DBT クラウド

データベース: スノーフレーク

環境:

  • アップストリーム モデルは、スキーマ = 'upstream_model' で、upstream という名前の dbt クラウド環境で構築されます。
  • downstream_model は、スキーマ = 'downstream_model' で、downstream という名前の dbt クラウド環境で構築されます

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

    

アップストリーム モデルのマテリアライゼーション = 'エフェメラル' の場合、機能し、アップストリーム モデルを CTE として使用します: エフェメラル マテリアライゼーション

アップストリーム モデルの実体化 = 'テーブル' の場合、アップストリーム モデルのダウンストリーム モデルのスキーマを参照するため、失敗します: テーブルの作成に失敗します

アップストリーム.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