🐈

dbt macro tips advent calendar 2022 day 1 - dbtにおけるmacroとは

2022/12/01に公開

便利なデータ変換ツールである dbt の中のmacroに関するtipsを書いていく dbt macro tips Advent Calendar 2022 1日目です。

はじめに

本Advent Calenderは以下のような人向けの内容となります。

  • dbtの基本的な機能に慣れてきて、1歩踏み込んだ使い方をしたい人
  • Customなpackageを作成したい人

そのため、dbt基本的な機能の部分については、説明を省くことがあります。
また、なるべく広く試せるように、 OSS版のdbt Coreを前提に話を進めていこうと思います。
(もちろん、dbt Cloudでも、同様に使用することが可能ではあるとは思いますが、念の為明言しておこうと思います)
説明がされていない部分については、 チュートリアル もしくは、他の皆様のわかりやすい記事におまかせしつつ進めていこうと思います。

dbt とは

近年定着しつつある Modern data stack という考え方において、 ELTの Tを担うツールとして紹介されることがあるのが dbt となります。

dbtは、Jinjaというテンプレートエンジンを用いてテンプレート化されたSQLの「描画」 および 「実行」する機能を提供します。 データ変換をSQLで行う場合、このテンプレート化されたSQLというのが非常に強力な味方となります。 1つのSQLファイルを1つのモデルとして取り扱い、そのモデルの具体的な更新方法やDWH内の物理的な存在方法について、テンプレート中で取り扱うことができるようになっているのが特徴でもあります。そして、モデルの依存関係は dbtを標準的に使う範疇では、自動的に解決されて実行されます。

dbtにおけるmacro とは

macroという機能は、Jinja テンプレートエンジンの機能になります。
これは、反復的に使用するような記述を再利用するための機能となります。
汎用的なプログラミング言語における関数 のような役割を担います。

基本的な記述は形式は以下のようになります。

{% macro 名前 ( [引数1, 引数2,...] ) -%}
・・・・・処理内容・・・・
{% -endmacro %}

このような記述をした .sql ファイルをdbt project配下の macros 以下のディレクトリに配置することで、dbtはモデルで定義したmacroを使用可能となります。
(なお、dbtのdbt_project.yml内の macro-pathsを変更、追加することで別のディレクトリにすることも可能です。)

dbtにおけるmacroは以下のような事が可能になるため、macroを使いこなすと格段にdbtの利便性が上がります。

  • dbtの実行のはじめと終わりに共通の処理を追加する
  • modelの実行前、実行後に追加の処理を行う
  • ドメインスペシフィックなカスタムテストの作成
  • スキーママイグレーション等のoperationの記述・実行
  • modelの特殊なmaterializationを作成する
  • いくつかのdbtの挙動を書き換える
  • etc...

今回のAdvent Calendarですべてを扱いきれ無いとは思いますが、macroに関するtipsを通して、より便利なdbtの世界に皆様をいざなえればと思います。


2日目は一番簡単なマクロについて説明します。

Discussion