ちょっと話題の記事

個人的dbt概要まとめ2023 – dbtで何が出来るのか、dbtを使うメリットなどを紹介 #dbt

2023.05.11

アライアンス統括部 サービスグループのしんやです。

クラスメソッドは「関連する(フルマネージドなクラウド)サービスを組み合わせることによって実現するデータ分析基盤=モダンデータスタック」のサービスをお客様のニーズに合わせて提供しています。

その中のサービスの1つである「dbt(Data Build Tool)」についてはDevelopersIOでは既に多くのdbt関連エントリが投稿されていますが、個人的には直接触ったことのない未知のツールでした。

dbtはこれから色々と触って試していこうと思っていますが、その前に「dbtとはどういうサービスなのか、使うことで何が嬉しくて何が出来るようになるのか」を既存ブログエントリや公式ドキュメントを踏まえて把握し、現時点での「dbt概要まとめ」的なエントリとして残しておこうと思います。

目次

 

先人の記録からdbtを知る

まずは過去、当ブログにて執筆されたdbt関連エントリから、概要を把握する上で有用となるものを幾つか見ていきたいと思います。

DevelopersIOにおけるdbtエントリ1本目がこちら。そもそも「dbtとはなんぞや」という部分、触りの部分を把握する事が出来ます。

下記エントリでは、dbtの歴史に関する部分、またもう少し踏み込んだ形でコンセプトや特徴について知る事が出来ます。

下記エントリでは、DWHにSnowflakeを指定した場合の組み合わせとして「dbtをあわせて使うことのメリット」について紹介しています。dbtがDWHとして実際に併用する機会の多いSnowflakeを踏まえて解説がされているので、dbtの利用イメージがよりしやすくなるかと思います。

 

公式ドキュメントから「出来ること」「メリット」を知る

続いては、現行の公式ドキュメントやリソースなどから「dbtで出来ること」「dbtを使うメリット」について改めて見ていきたいと思います。上記情報と被る部分も出てくるかとは思いますがご了承ください。

「What, exactly, is dbt?(dbt とは正確には何ですか?)」という上記ブログエントリから得られるポイントは概ね以下の通りです。

  • データアナリストやエンジニアがデータウェアハウス(DWH)内のデータをより効果的に変換出来るようにするサービスである
  • ELTプロセスにおけるT(Transform/変換)を行う
  • データウェアハウス内で実行されるデータ変換ジョブの作成と実行を支援するツールであり、dbt の唯一の機能は「コードを取得して SQL にコンパイルし、データベースに対して実行すること」
  • 基本的なレベルに於いて、「コンパイラ」と「ランナー」という2つのコンポーネントを持つ
  • dbtのコードは「SQL」と「Python エコシステムで使用される一般的なテンプレート言語であるJinja」を組み合わせたもの
  • パッケージマネージャーの機能を備えており、dbtコードのパブリックリポジトリとプライベートリポジトリの両方を公開し、他ユーザーが参照出来るように出来る

dbt公式サイトの情報として展開されている上記の「What is dbt?(dbtとは何か?)」では以下に記すようなポイントが紹介されています。

  • SQLファーストの変換ワークフローで、モジュール性、移植性、CI/CD、文書化といったソフトウェアエンジニアリングのベストプラクティスに従って、分析コードを迅速かつ共同作業で展開することが出来る。これにより、データチームの誰もが、プロダクショングレードのデータパイプラインに安全に貢献することが出来る。
    • 「バージョン管理とCI/CD」の側面に於いては、開発環境を使って安全にデプロイ/Git対応のバージョン管理と連携させる事で様々なコラボレーションを実現/状態を以前のバージョンに戻すこと等が出来るようになる
    • 「テストとドキュメント」の側面に於いては、本番環境へリリースする前に全てのモデルをテスト/動的に生成されたドキュメントをデータ関係者に共有すること等が出来るようになる
    • 「開発」の側面に於いては、SQLやPythonでモジュール化されたデータ変換を記述し、依存関係をdbt上で管理出来るようになる
  • dbtを活用する事でユーザーに「新しいデータ変換の新基準」を提唱、以下のような効果を期待出来るようになる
    • 開発スピードの向上
      • 設定のSQLファイル(SELECT文)に変換/依存関係を推論/テーブルとビューを構築/モデルを順番に実行
      • Cloud IDEでマクロやref文、オートコンプリートコマンドを使ったコード開発
      • Pythonパッケージの活用
    • 同じ前提で動作を実現
      • dbt側で予め用意されたパッケージやカスタムテスト
      • 依存関係グラフや動的なデータ辞書の自動生成
    • 安心出来るデプロイ環境
      • スケジューリング、ロギング、アラート
      • ブランチの保護ポリシーででデータ移動を保証
    • サイロ化の解消
      • SQLやPythonによるモデリングをサポート
    • セキュリティ
      • SOC-2コンプライアンス、CI/CDデプロイメント、RBAC、ELTアーキテクチャでリスクを管理
    • ガバナンス
      • バージョン管理、テスト、ロギング、アラートにより、データの疑義を排除

 

対応するデータプラットフォーム
(接続先データ環境)

dbtがSQLを実行可能とする「対応するデータプラットフォーム」は以下のドキュメントにまとまっています。

dbtはこれらのデータプラットフォームに「アダプタ(Adapter)」という仕組みを使ってアクセスします。

現在(2023年05月)時点で接続可能なデータプラットフォームは以下の通り。

  • 認証済みアダプタ
    • AlloyDB(dbt-postgresと同じ)
    • Azure Synapse/1.3 ?
    • BigQuery/1.4
    • Databricks/1.4
    • Dremio/1.4 ?
    • Postgres/1.4
    • Redshift/1.4
    • Snowflake/1.4
    • Spark/1.4
    • Starburst & Trino
  • コミュニティアダプタ
    • Athena
    • Clickhouse
    • IBM DB2
    • Doris & SelectDB
    • DuckDB
    • Dremio
    • Exasol Analytics
    • Firebolt
    • AWS Glue
    • Databend Cloud
    • Greenplum
    • Hive
    • Impala
    • Infer
    • iomete
    • Layer
    • Materialize
    • MindsDB
    • MySQL
    • fal(Python models)
    • Oracle
    • Rockset
    • SingleStore
    • SQLite
    • SQL Server & Azure SQL
    • Teradata
    • TiDB
    • Vertica

 

dbtを構成する2つのプロダクト

 

dbt Core

データチームがアナリティクスエンジニアリングのベストプラクティスを用いてデータを変換することを可能にするオープンソースのコマンドラインツール。CLIの形式で提供。

 

dbt Cloud

WebベースのUIで提供。データモデルの開発、テスト、スケジュール、調査の全てを行う事が可能です。

dbt Cloudについては、dbt Core を組織全体で実行するためのホスト型アーキテクチャを提供するだけでなく、ジョブのスケジューリング、CI/CD、ドキュメントのホスティング、モニタリングとアラート、統合開発環境(IDE)などのターンキーサポートを備えています。

ここまでの内容紹介と被る部分もありますが、dbt Cloudでは以下の機能を利活用する事が可能です。

  • dbt Cloud IDE
    • ブラウザから直接 dbt プロジェクトを構築、テスト、実行、およびバージョン管理が可能
  • 環境の管理
    • 個別の実稼働環境と開発環境をセットアップおよび管理可能
    • エンジニアがユーザーやデータに影響を与えることなく、より効率的にコードを開発およびテスト出来るように
  • dbtジョブのスケジュールと実行
    • 実稼働ジョブを実行するためのカスタム スケジュールを作成
    • 曜日、時間帯、または定期的な間隔でジョブをスケジュール可能
    • Webhookを使用してCI ジョブをトリガーし、API を使用してジョブを開始することで、運用コストを削減可能に
  • 通知
    • dbt Cloud でジョブ通知を設定およびカスタマイズし、ジョブの実行や失敗、またはキャンセル時に電子メールまたはSlackアラートを設定可能
  • ドキュメントのホストと共有
    • dbtプロジェクトドキュメントをホストし、プロジェクトのスケジュールに従ってデータドキュメントを生成
    • チームメイトを dbt Cloudに招待しプロジェクトのドキュメントを共同作業して共有
  • ログ出力(ログへのアクセスを民主化)
    • dbt実行の進行中ログと履歴ログを表示およびダウンロード可能に
    • チームの誰でも簡単にエラーをより効率的にデバッグ出来るようになる
  • GitHub、GitLab、Azure DevOPs をサポート
    • gitアカウントをdbt Cloudにシームレスに接続、dbt Cloudに別のセキュリティ層を提供
    • 新しいリポジトリのインポート、継続的インテグレーションのトリガー、HTTPS を使用したリポジトリのクローン作成などを実施
  • 継続的インテグレーション
    • 新しいコミットがオープンなプルリクエストにプッシュされたときに、一時スキーマでdbtプロジェクトを実行するようにdbt Cloud を構成
  • セキュリティ対応
    • SOC-2 準拠、CI/CD 導入、RBAC、ELT アーキテクチャによりリスクを管理
  • dbtセマンティックレイヤー
    • dbtモデルと一緒にメトリクスを定義し統合された分析ツールからクエリを実行、いつでもどこでも同じ答えが得られるように
  • メタデータAPI
    • ワークフローを強化し、アドホック クエリを実行したり、スキーマを参照したり、dbt セマンティック レイヤーをクエリしたり出来るようになる
    • 任意のクエリをサポートする GraphQL APIを提供
  • モデル タイミング ダッシュボード
    • 実行を視覚化して調査し、モデルのボトルネックを特定
    • モデル タイミング ダッシュボードには、完了した各ジョブのモデル情報、順序、実行時間が表示される

 

費用

費用に関しては以下のページにまとまっています。

 

まとめ

という訳で、dbtの個人的まとめ2023年版の紹介でした。

個人的に未体験、未知のモダンデータスタック関連サービスについてはこの形式でサービスの概要を掴んで行こうと思います。