■ はじめに
dbt を解析しなくてはならず、その中で if文で分岐している箇所があったので それに付随するTipsなどをまとめておく
目次
【1】if文 【2】関連するDBTマクロ 1)is_incremental() 2)load_relation 3)run_query()
【1】if文
* 基本、Pythonのテンプレートエンジン「jinja2(神社2)」と同じ
1)構文
# Statements {% ... %} # Comments {# ... #} {% if 条件式1 %} {# 条件式1が true なら実行される #} {% elif 条件式2 %} {# 条件式2が true なら実行される #} {% else %} {# 条件式1も2 false なら実行される #} {% endif %}
【2】関連するDBTマクロ
1)is_incremental()
* materialized='incremental' 時でのテーブルの存在チェックで使用する * True / False で返す
https://docs.getdbt.com/docs/build/incremental-models#understand-the-is_incremental-macro
* 以下の条件を当てはまる場合、True になる + テーブルが既に存在する場合 + 「full-refresh」モードで動いていない + materialized='incremental' * materialized='incremental'については、以下の関連記事を参照のこと
dbt ~ 更新 / 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/12/07/060129
2)load_relation
https://docs.getdbt.com/reference/dbt-jinja-functions/adapter#load_relation
* テーブルの存在チェックで使用する => あれば Relation object(※1), なければ、Noneを返す => コード見た方が理解が早い
※1:Relation object
https://docs.getdbt.com/reference/dbt-classes#relation
サンプル
{% set has_exists = load_relation(ref('demo_model')) is not none %} {% if has_exists %} {{ log("demo_model has already been built", info=true) }} {% else %} {{ log("demo_model doesn't exist in the warehouse. Maybe it was dropped?", info=true) }} {% endif %}
3)run_query()
https://docs.getdbt.com/reference/dbt-jinja-functions/run_query
* SQL実行
サンプル
{% set table_count=run_query('SELECT COUNT(*) FROM demo_db.demo_schema.demo_table') %} {% if table_count.columns[0].values()[0]>0 %}
使用上の注意
* 結果が大量に返ってくるような結果を変数に入れると メモリ不足で落ちる可能性がある => 実際にあった事象は、以下の関連記事の 「【1】Airflow + dbt でエラー「Task exited with return code -9」」を参照のこと
動的なdbt 実行時でのトラブル
https://dk521123.hatenablog.com/entry/2024/09/10/145921
関連記事
dbt ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/12/16/152147
dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt Macro ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/29/003751
dbt ~ 更新 / 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/12/07/060129
動的なdbt 実行時でのトラブル
https://dk521123.hatenablog.com/entry/2024/09/10/145921
Flask ~ jinja2 ~
https://dk521123.hatenablog.com/entry/2018/09/22/142348
Jinja ~ マクロ ~
https://dk521123.hatenablog.com/entry/2023/11/28/235951