■ はじめに
dbt を解析しなくてはならず、その中で if文で分岐している箇所があったので それに付随するTipsなどをまとめておく
目次
【1】if文 1)構文 2)演算子 【2】関連するDBTマクロ 1)is_incremental() 2)load_relation 3)run_query() 【3】Tips 1)Noneチェック
【1】if文
* 基本、Pythonのテンプレートエンジン「jinja2(神社2)」と同じ => 詳細は、以下の関連記事を参照のこと
Jinja2 ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/10/18/001757
1)構文
# Statements {% ... %} # Comments {# ... #} {% if 条件式1 %} {# 条件式1が true なら実行される #} {% elif 条件式2 %} {# 条件式2が true なら実行される #} {% else %} {# 条件式1も2 false なら実行される #} {% endif %}
2)演算子
演算子 | 説明 |
---|---|
== | 等価比較 |
!= | 非等価比較 |
and | 論理積 |
or | 論理和 |
not | 否定 |
【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()
* SQL実行
https://docs.getdbt.com/reference/dbt-jinja-functions/run_query
* 詳細は、以下の関連記事を参照の事
dbt ~ SQL実行関数 / run_query ~
https://dk521123.hatenablog.com/entry/2025/04/28/000032
サンプル
{% set table_count=run_query('SELECT COUNT(*) FROM demo_db.demo_schema.demo_table') %} {% if table_count.columns[0].values()[0]>0 %}
【3】Tips
1)Noneチェック
* "none" でチェックするので注意
サンプル
{%- if value is none -%} ... {%- endif -%}
関連記事
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 ~ SQL実行関数 / run_query ~
https://dk521123.hatenablog.com/entry/2025/04/28/000032
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
Jinja2 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/10/19/000848
Jinja2 ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/10/18/001757
Jinja2 ~ Macro ~
https://dk521123.hatenablog.com/entry/2023/11/28/235951
Jinja2 ~ Whitespace Control ~
https://dk521123.hatenablog.com/entry/2024/10/29/151203