以下の内容はhttps://dk521123.hatenablog.com/entry/2023/12/07/060129より取得しました。


【dbt】dbt ~ 更新 / 基礎知識編 ~

■ はじめに

DBT での色々な更新について徐々にではあるがまとめていく

目次

【1】materialized
 1)materialized='table'
 2)materialized='view'
 3)materialized='incremental'
 4)materialized='ephemeral'
 5)materialized='materialized_view' / materialized='dynamic_table' 
【2】incremental_strategy
 1)append
 2)merge
 3)insert_overwrite
 4)delete+insert
 5)独自ストラテジ
【3】is_incremental()
【4】使用上の注意
 1)PostgreSQLの場合

【1】materialized

* dbtのモデルをDB/WHに保存するための戦略パターンを指定

cf. materialized = 具体化/具現化する

https://docs.getdbt.com/docs/build/materializations

1)materialized='table'

* データモデルを「テーブル」として作成(洗い替え)

2)materialized='view'

* データモデルを「ビュー」として作成

3)materialized='incremental'

* データモデルを「テーブル」として作成(追記・更新)

4)materialized='ephemeral'

* 共通テーブル式(CTE)として扱う

cf. ephemeral (エフェメラル) = つかの間の、はかない、短命な

5)materialized='materialized_view' / materialized='dynamic_table'

* データモデルを「マテリアライズドビュー」として作成
 + materialized='materialized_view' ... Postgres/Redshift/Databricks/Bigquery
 + materialized='dynamic_table' ... snowflake

https://docs.getdbt.com/blog/announcing-materialized-views

【2】incremental_strategy

* 以下の公式ドキュメントの表によると、使用するDWHによって
 取りうる設定値が異なる

https://docs.getdbt.com/docs/build/incremental-strategy#supported-incremental-strategies-by-adapter
https://iomete.com/docs/guides/dbt/dbt-incremental-models-by-examples

* 以下、主な取りうる値。

1)append

* データ追加(insert)

2)merge

* データ更新(update or insert)
* デフォルト

3)insert_overwrite

* 上書き追記

4)delete+insert

* 削除後に insert

5)独自ストラテジ

* Customすることも可能
 => 詳細は、以下の関連記事を参照

dbt ~ 更新 / 独自ストラテジ ~
https://dk521123.hatenablog.com/entry/2025/10/01/173127

【3】is_incremental()

* materialized='incremental' 時でのテーブルの存在チェックで使用する
* True / False で返す
* 以下の条件を当てはまる場合、True になる
 + テーブルが既に存在する場合
 + full-refresh モードで動いていない
 + materialized='incremental'

https://docs.getdbt.com/docs/build/incremental-models#understanding-the-is_incremental-macro

サンプル

{% if is_incremental() %}

  -- this filter will only be applied on an incremental run
  -- (uses >= to include records arriving later on the same day as the last run of this model)
  where date_day >= (select max(date_day) from {{ this }})

{% endif %}

【4】使用上の注意

1)PostgreSQLの場合

* PostgreSQL が古いバージョンだと動かない場合がある

 => DBTが裏でMERGE INTO を使っており、
  PostgreSQLの場合、MERGE INTO は PostgreSQL v15からサポートされる

 => PostgreSQL v12 を使っていたので、結構ハマった、、、

 => なお、PostgreSQLのバージョン確認は、「SELECT VERSION();」

参考文献

https://docs.getdbt.com/docs/build/incremental-models
https://docs.getdbt.com/docs/build/materializations

関連記事

dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ 基本編 / Source ~
https://dk521123.hatenablog.com/entry/2023/12/08/111012
dbt ~ 更新 / Update or Insert / Insert ~
https://dk521123.hatenablog.com/entry/2023/12/19/224453
dbt ~ 更新 / Delete and Insert ~
https://dk521123.hatenablog.com/entry/2023/12/20/000104
dbt ~ 更新 / DROP + CTAS ~
https://dk521123.hatenablog.com/entry/2023/12/04/000000
dbt ~ 更新 / 独自ストラテジ ~
https://dk521123.hatenablog.com/entry/2025/10/01/173127




以上の内容はhttps://dk521123.hatenablog.com/entry/2023/12/07/060129より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14