なぜdbt(data build tool)が話題となっているか
最近オープンソースであるdbt(data build tool)が何かと話題になっています。 いくつか理由が考えられますが、 主な理由は近年DBの性能向上に伴いETLからELTが主流となったことに伴い、 DB上でのTransformの役割が増えてきたことが影響していると考えられます。 これまでは規模が小さい場合はスケジュール実行のみ可能な簡易的なワークフローで対応し、 規模が大きくなったタイミングでdigdag等依存関係のはれるジョブスケジューラの導入を提案することが多かったですが、 dbtの登場によって今後は小規模でも複雑な依存関係が入ったワークフローが組める可能性が出てきました。
今回はそういったdbtを実際に使ってみて使用感をまとめてみようと思います。
dbtの特徴
dbtの特徴としては以下のようなものがあげられます。
- オープンソースであり無料で利用することができる
- pythonやJinja2を組み合わせてSQL記法することができる
- 依存関係も貼ることができ、複雑なマート設計も可能
- Gitを利用してバージョン管理を行うことができる
GUIで操作がわかりやすくなっている一方でコードで設定を記述してGit管理されており、 利用者と管理者(エンジニア)両方にとって使いやすい印象を受けました。
実際に使ってみた
ここからはdbtの無料プラン(developer)で使ってみた内容について記載しようと思います。
利用開始方法
dbt cloudの利用開始方法は公式の Set up and connect BigQuery に記載がある通り、 dbtのアカウント作成後プロジェクトを作成して必要事項を埋めていくことで開始することができます。 詳細な手順は同じく今話題のChatGPTで出力した内容を載せておきます。
設定の編集
利用開始時点ですでにフォルダ構成が出来上がっているため、 いくつかのファイルを編集することで使い始めることができます。 マートやviewを作る上では最低限以下2つを編集すればできます。
- 設定ファイル:
dbt_ptoject.yml
- SQLファイル:
models/**.sql
設定ファイル
設定ファイルは主に添付画像の赤枠内の models
配下を編集する必要があります。 今回は主にデータセット名を変えつつデフォルトは物理テーブルを作成するように変更します。
models:
dbt_ysakurai: # ここを編集することでデータセット名を変えることができます
materialized: table # デフォルトで物理テーブル or Viewどちらを作るか設定できます
example:
materialized: view # ここでexampleフォルダ配下の設定を行います
SQLファイル
あとは models
フォルダ配下のSQLに沿ってマートやviewが作られるため、用途に合わせてSQLの編集を行います。 普通のSQLとの違いでいうと以下のような特徴があります。
- pythonやJinja2が使えるため、if文などを利用することができる
{{ config(materialized='table') }}
など、configで設定した値を変えることができる{{ ref('my_first_dbt_model') }}
など、他で作成したテーブルを参照することができる
デプロイ
このようにconfigとSQLを編集した後、画面下のコンソールから dbt run
を実行することでBigQueryに反映することができます。 またJobsを設定することでスケジュール実行を行うこともできます。その他に dbt docs
系のコマンドによってドキュメントの作成及び閲覧もできるはずですが、 dbtの依存関係周りのエラー(No matching handler found for rpc method None (which=serve)
)が出るため、 解消でき次第記事に追記させていただければと思います。
既存ツールとの比較
最後にTransform箇所で利用可能な他の既存ツールとの比較を行おうと思います。
手段 | メリット | デメリット |
---|---|---|
scheduled query | ・管理サーバー不要 ・スケジュール実行可能 ・サービス料金無料 | ・ジョブ依存管理不可 ・数が増えると管理困難 ・SQLで行える処理のみ実行可能 |
Cloud Run | ・複雑なジョブ実行可能 ・スケジュール実行可能 ・比較的安価に利用可能 | ・ジョブ依存管理不可 ・数が増えると管理困難 |
Cloud Composer (Airflow) | ・ジョブ依存管理可能 ・スケジュール実行可能 | ・学習コストが高い ・$400~/月程度のインフラ費用 |
trocco | ・ELTのすべて対応可能 ・ジョブ依存管理可能 ・スケジュール実行可能 | ・10万~/月程度のインフラ費用 |
dbt cloud | ・ジョブ依存管理可能 ・スケジュール実行可能 ・無料から利用可能 | ・学習コストが少しあり |
簡易的な比較ですが「ジョブ依存・スケジュール実行が安価にできる」が大きな特徴としてあげられそうです。
まとめ
今まで小さな組織では一旦scheduled queryから開始することが多かったですが、 今後はdbtを用いて初期の段階からジョブ依存も貼れるワークフローを導入することが選択肢として入ってくると思われます。 その際はGit周りなどの学習コストが必要となるため、 運用する組織のスキルセットに合わせて選択していく形になるかと思われます。
dbtと連携しているデータ連携ツールとして最近Fivetranというサービスも話題になっているので、 次の機会ではFivetranと合わせて使った場合の使い勝手についてまとめていければと思います。