dbt とは
dbt とは、data build tool の略で、ELT の T を担当するソフトウェアです。つまり、データウェアハウスにあるデータを加工してデータウェアハウスに書き戻すツールになります。ELT の EL の部分は Meltano など他のツールに任せます。
特徴
dbt には主に以下の機能や特徴があります。
- SQL の SELECT 文だけで開発可能
- スキーマや依存関係に関するドキュメントの自動生成機能
- NULL、参照整合性などの自動テスト機能
- Jinjaによる処理のモジュール化
- Git、CI / CD などソフトウェア開発の手法が活用可能
dbt の利用方法
dbt は、SaaS としての「dbt Cloud」と OSS の「dbt CLI」を利用することができます。それぞれの機能の違いは以下の記事をご参照ください。
dbt Cloud
dbt Cloud は一人だけの利用であれば無料ですが、複数人であればアカウント当たり 50 ドルかかります。dbt Cloud のチュートリアルは、以下の記事が大変参考になります。
dbt CLI
dbt CLI は OSS なので無料で利用可能です。dbt CLI のインストール方法は以下の4種類があります。
- Homebrew を使用
- pip を使用
- ソース(GitHub コード)を利用
How to install dbt
今回は pip でインストールした dbt CLI を使って、BigQuery のデータを加工していきます。
BigQuery にデータを用意
まずはテストデータを用意します。こちらの記事にある以下の csv ファイルをローカルに作成します。
- raw_customers.csv
- raw_orders.csv
- raw_payments.csv
そして BigQuery で「sample_dbt」と名付けたデータセットを用意し、3 つの csv インポートしてテーブルを作成します。
これから、BigQuery の「sample_dbt」データセットにある「raw_customers」テーブル、「raw_orders」テーブル、「raw_payments」テーブルを dbt を用いて加工していきます。
dbt 環境構築
ディレクトリを作成し、仮想環境を用意します。
以下のコマンドを実行します。
以下のコマンドで dbt のバージョンを確認します。
以下のコマンドでプロジェクトを作成します。インタラクティブな質問に答えていきます。
~/.dbt/
にprofiles.yml
が作成されています。
以下のコマンドで BigQuery との接続を確認します。
customers テーブルを作成
こちらと同じように、models/customers.sql
を作成し、同じ SELECT 文を作成します。
/models/example
フォルダを削除し、dbt_project.yml
の models を以下のように編集します。
dbt run
で/model
ディレクトリ下にある.sql ファイルから BigQuery にテーブルを作成します。
「customers」テーブルが作成され、dbt でデータの加工ができていることが確認されました。

生成データモデルの種類
dbt で作成したモデルは以下の4種類のデータウェアハウスへの保存方法があります。これらはマテリアライゼーションと呼ばれます。
- View(ビュー)
- dbt でデフォルトで設定されているマテリアライゼーションであり、データががビューとして生成されます。(CREATE VIEW as)
- Table(テーブル)
- データがテーブルとして生成されます。(CREATE TABLE as)
- Ephemeral(一時的)
- SQL としては発行されますが、実体化はされません。中間処理を挟むためだけに使われます。
- Incremental(増分更新)
それぞれのマテリアライゼーションの説明
dbt のモデル
dbt においてモデルとは.sql ファイルで定義された SELECT 文のことを指します。dbt はモデルをCREATE VIEW AS
などでラップしてデータウェアハウスに作成します。
主要コマンド
dbt では以下の主要なコマンドがあります。
dbt run
dbt test
- スキーマを定義した
models/schema.yml
を作成し、実行するとスキーマテストが可能です。
dbt generate doc
models/schema.yml
をもとにドキュメントを作成します。
モデルへテストとドキュメントの追加をしよう
クエリの抽象化
bdt では、Jinja やマクロを利用した高度なモデリングが可能となります。
Jinja
Jinja を使ってコードを利用し、シンプルなコーディングを実現することができます。
マクロ
以下のようにマクロを作成し、他の dbt モデルから参照することができます。
参考

備考
Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。
