既存の上流テーブル モデルを参照する下流モデルを実行しようとしています。ダウンストリーム モデルがダウンストリーム スキーマでアップストリーム モデルを見つけようとしているため、これは失敗しています。
環境/スキーマがDBTクラウドでどのように設定されているかということと関係があるのでしょうか? または、単純なものが欠けているのかもしれませんが、私の人生ではそれを見つけることができません。
以下に、最も簡単な再現を作成しました。
ホスト: DBT クラウド
データベース: スノーフレーク
環境:
- アップストリーム モデルは、スキーマ = 'upstream_model' で、upstream という名前の dbt クラウド環境で構築されます。
- downstream_model は、スキーマ = 'downstream_model' で、downstream という名前の 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