BLOG

ブログ

データ周りで話題のdbt(data build tool)をBigQueryを使ってみました

なぜ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と合わせて使った場合の使い勝手についてまとめていければと思います。

参考リンク

SinkCapitalではデータに関する支援を行っています

弊社はスペシャリスト人材が多く在籍するデータ組織です。 データ分析や分析基盤の設計などでお困りの方がいらっしゃれば、 まずは無料で、こちらから各分野のスペシャリストに直接相談出来ます。