はじめに
データ分析の世界では、生データを分析しやすい形に「変換(Transform)」するプロセスが不可欠です。しかし、この変換ロジックが個人のPC内のExcelファイルや、共有フォルダに散らばった無数のSQLファイルで管理されている、といった状況は少なくありません。その結果、「どのSQLが最新だっけ?」「この指標の計算ロジックはどこにある?」といった問題が頻発し、データの一貫性や信頼性が損なわれがちです。
このデータ変換プロセスに、ソフトウェア開発のベストプラクティス(バージョン管理、テスト、ドキュメンテーション)を持ち込み、誰でも信頼性の高いデータパイプラインを構築できるようにするツールがdbt (data build tool) です。
dbtの最大の魅力は、データアナリストやエンジニアが使い慣れた「SQL」だけで、モダンなデータ変換パイプラインを構築できる点にあります。この記事では、オープンソース版であるdbt CoreとGoogle BigQueryを使い、dbtプロジェクトのセットアップから、モデルの構築、テスト、ドキュメント化までをハンズオン形式で解説します。
最短で課題解決する一冊
この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。
dbtとは何か?
dbtは、ELT (Extract, Load, Transform) プロセスのうち、最後の「T (Transform)」に特化したツールです。データウェアハウス(DWH)にロード(Load)された後の生データに対して、SQLを使ってクリーンナップ、集計、ビジネスロジックの適用などを行い、分析に適した形に変換する役割を担います。
dbtが提供する主な価値は以下の通りです。
- SQLのモジュール化: 長大なSQLクエリを、再利用可能な小さな単位(モデル)に分割できます。
- 依存関係の管理: モデル間の依存関係を自動で解決し、正しい順序で実行してくれます。
- テストの自動化: データに欠損値がないか、IDが一意であるかといったデータ品質テストを簡単に定義・実行できます。
- ドキュメントの自動生成: モデルの定義や依存関係(リネージ)を可視化したドキュメントを自動で生成します。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
dbt Coreクイックスタート(BigQuery編)
それでは、実際にdbtプロジェクトをセットアップしていきましょう。
前提条件
- Python 3.8以上とpipがインストール済み
- Google Cloud (GCP) プロジェクトと、BigQueryが有効になっていること
- (推奨)Gitによるバージョン管理
Step 1: dbt-bigqueryのインストール
まず、dbt Core本体とBigQueryに接続するためのアダプタをインストールします。ターミナルで以下のコマンドを実行してください。
# 仮想環境の作成を推奨
python -m venv dbt_env
source dbt_env/bin/activate
# dbtとBigQueryアダプタをインストール
pip install dbt-bigqueryStep 2: dbtプロジェクトの初期化
次に、dbtプロジェクトを作成します。
dbt init my_dbt_projectこのコマンドを実行すると、my_dbt_projectというディレクトリが作成され、中にいくつかのサブディレクトリと設定ファイルが生成されます。
models/: データ変換ロジックであるSQLファイルを配置する場所。tests/: カスタムのデータテストを記述する場所。dbt_project.yml: プロジェクト全体の設定ファイル。
Step 3: BigQueryへの接続設定
dbtがBigQueryに接続するための認証情報を設定します。この設定は~/.dbt/profiles.ymlというファイルに記述します。
まず、GCPでサービスアカウントを作成し、**「BigQuery データ編集者」と「BigQuery ジョブユーザー」**のロールを付与して、JSONキーファイルをダウンロードしておきます。
次に、~/.dbt/profiles.yml(なければ新規作成)を以下のように編集します。
my_dbt_project: # dbt_project.ymlの`profile`名と一致させる
target: dev
outputs:
dev:
type: bigquery
method: service-account
project: <your-gcp-project-id> # GCPプロジェクトID
dataset: dbt_your_name # dbtがモデルを作成するデータセット名
threads: 4
keyfile: /path/to/your/keyfile.json # ダウンロードしたJSONキーへのパス設定が完了したら、プロジェクトディレクトリに移動し、dbt debugコマンドを実行します。Connection test PASSEDと表示されれば成功です。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
dbtの基本概念と実践
接続が確認できたので、実際にデータ変換モデルを作成していきましょう。
1. モデル (Models) の作成
モデルは、dbtにおけるデータ変換の基本単位であり、実体は単なるSELECT文が書かれたSQLファイルです。models/ディレクトリにstg_customers.sqlというファイルを作成してみましょう。
-- 生データソースから顧客データを取得し、ステージングモデルを作成
SELECT
id as customer_id,
first_name,
last_name
FROM
`dbt-tutorial.jaffle_shop.customers` -- ここでは公開データセットを例として使用次に、このステージングモデルを参照して、新しいモデルdim_customers.sqlを作成します。
-- ステージングモデルを参照し、顧客のフルネームを作成
SELECT
customer_id,
first_name || ' ' || last_name as full_name
FROM
{{ ref('stg_customers') }} -- ref関数で他のモデルを参照{{ ref('stg_customers') }}がdbtの強力な機能です。これにより、dbtはモデル間の依存関係を理解し、stg_customersを先に実行してからdim_customersを実行するという順序を自動的に決定します。
2. テスト (Tests) の追加
データ品質を担保するためにテストを追加します。dbtでは、.ymlファイルで簡単にテストを定義できます。
models/ディレクトリにschema.ymlというファイルを作成します。
version: 2
models:
- name: stg_customers
columns:
- name: customer_id
tests:
- unique # customer_idが一意であることをテスト
- not_null # customer_idがNULLでないことをテストここでは、stg_customersモデルのcustomer_idカラムが、一意(unique)かつ非NULL(not_null)であることをテストしています。dbtにはこのような組み込みテストが多数用意されており、データ品質の維持に大きく貢献します。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
パイプラインの実行とドキュメント生成
モデルとテストの準備ができたので、パイプラインを実行してみましょう。
dbt run: このコマンドは、models/ディレクトリ内の全てのSQLファイルを実行し、BigQuery上にモデルをビュー(デフォルト)またはテーブルとして作成します。dbt test: このコマンドは、.ymlファイルに定義された全てのテストを実行し、データが品質基準を満たしているかを確認します。
そして、dbtのもう一つの強力な機能がドキュメントの自動生成です。
dbt docs generate: プロジェクトのドキュメントを生成します。dbt docs serve: 生成されたドキュメントをローカルサーバーで表示します。
ブラウザでhttp://localhost:8080にアクセスすると、各モデルのカラム情報やテスト内容、そして**モデル間の依存関係を可視化したデータリネージ(系統図)**を確認できます。これにより、データがどのように変換されていくのかが一目瞭然になります。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
まとめ
dbtは、これまで属人化しがちだったデータ変換プロセスに、規律と共同作業性、そして信頼性をもたらす画期的なツールです。SQLという共通言語をベースにしているため、データアナリストからデータエンジニアまで、データに関わる全ての人が協力して、堅牢なデータパイプラインを構築できます。
今回紹介したのはdbtの基本的な機能だけですが、その奥深さと強力さを感じていただけたのではないでしょうか。ぜひ、あなたのデータウェアハウスでdbtを試し、モダンなデータエンジニアリングの世界に足を踏み入れてみてください。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
![標準SQL+データベース入門 ——RDBとDB設計、基本の力[MySQL/PostgreSQL/MariaDB/SQL Server対応]](https://m.media-amazon.com/images/I/51FLS9XpmUL._SL500_.jpg)
