dbt Coreとdbt Cloudの関係性・違いなどについてまとめてみた #dbt
アライアンス事業部 エンジニアグループ モダンデータスタック(MDS)チームの しんや です。
モダンデータスタック(MDS)におけるデータ変換処理、ELTデータパイプラインのアプローチにおける「T(Transform)」の部分をカバーするサービスである「dbt」(正式名称:data build tool)は、大きく分けて2つのプロダクトによって構成されています。それが「dbt Core」と「dbt Cloud」です。
当エントリでは、この2つのプロダクト「dbt Core」と「dbt Cloud」について、それぞれがどういう特徴を備えているのか、またそれぞれのプロダクトの違いについて要点を整理しながら見ていこうと思います。
目次
超基本的な部分の違い
まずはdbt Core/dbc Cloud双方における代表的な違いについてザッと紹介します。まずは以下の内容から。dbt Cloudがdbc Coreで出来ることを内包しつつ、更にはdbt Cloudでないと出来ないことがWeb画面で提供されている...というのが分かりやすい違いでしょう。あとはCoreは無償、Cloudは有償というのもユーザーとしては大きな相違点になるかと思います。
ポイント | dbt Core | dbt Cloud |
---|---|---|
費用 | 無償 | 有償(※) |
サービス提供形態 | オープンソースPythonパッケージ | SaaS |
操作 | コマンドラインインタフェース(CLI)で操作する | Web画面を介して操作する |
導入方法 | dbt Core及び関連するDWHのパッケージを所定の方法でインストール | 利用に際して必要なDWHやGitリポジトリの情報(環境)を予め用意しておき、Web画面を介して設定 |
出来ること | dbt Coreが提供しているコマンド操作(全般) | dbt Coreが提供しているコマンド操作(全般)+ dbc Cloudが提供しているWeb画面操作で出来る事全般 |
・dbt Pricing Plans
dbt Coreで出来ること
dbt Coreが提供しているコマンド操作は、関連するパッケージをインストールすることで利用出来るようになります。コマンドの一覧及びその詳細は下記リファレンスをご参照ください。
上記リファレンスからコマンドの一覧と、そのコマンドで出来ることを抜き出してみました。それぞれのコマンド操作を用途に応じて実行することで「dbtでやりたいこと」を実現していく流れです。
dbt build
: 選択された全てのリソース(models, seeds, snapshots, test)に対するテストとビルドを実施dbt clean
: 対象dbtプロジェクト内に存在する成果物を削除dbt clone
: 指定された状態から選択されたモデルを複製dbt compile
: 対象プロジェクト内のモデルをコンパイル(実行はしない)dbt debug
: dbt接続設定とプロジェクトのデバッグを実施dbt deps
: 対象プロジェクトの依存関係をダウンロードdbt docs
: 対象プロジェクトのドキュメントを生成dbt list
: dbtプロジェクトで定義されているリソースを一覧表示dbt parse
: プロジェクトを解析し、詳細なタイミング情報を書き込むdbt retry
: 最後に実行したdbtコマンドを障害発生時点から再試行dbt run
: プロジェクト内のモデルを実行dbt run-operation
: 「データベースに対する任意のメンテナンスSQLの実行」を含むマクロの呼び出しdbt seed
: CSVファイルをデータベースに読み込むdbt show
: 変換後のテーブル行をプレビューdbt snapshot
: プロジェクトで定義された"スナップショット"ジョブの実行dbt source
: ソース データを操作するためのツールを提供(ソースが「新鮮」であることの検証を含む)dbt test
: 対象プロジェクト内のテストを実行dbt init
: 新しいdbtプロジェクトを初期化する(CLIのみ)
dbt Cloudで出来ること
dbt Cloudは、上記dbt Coreで出来ることは画面を介しても実行可能です。更にはdbt Cloudならではの機能、dbt Cloudでなければ出来ない機能が多数利用可能です。
こちらもdbt Core同様「出来ること」をザッと眺めてみます。(※印が付いているものはプランによって利用可否が分かれる模様)
- dbt Cloud IDE(総合開発環境)
- 個別環境(実稼働環境と開発環境)のセットアップや管理
- dbtジョブのスケジュール実行
- ジョブ実行結果の通知機能
- dbtプロジェクトのドキュメントをホストして共有可能
- GitHub、GitLab、AzureDevOPs をサポート
- 継続的インテグレーション(CI)
- セキュリティ面の強化
- dbtセマンティックレイヤー
- Discovery API(※)
- ジョブ実行履歴
- dbtエクスプローラー(※)
構成・実行イメージ(の違い)
dbt Coreとdbt Cloudは共に「プロジェクトの設定に基づき、リポジトリと連携しDWHのデータベースに情報を反映、追記、更新していく」という大枠の流れは同じです。同じではありますが、要素の構成やその仕組みについてはそれぞれ異なります。下記エントリでは図解込みでとても分かりやすい紹介がなされていましたので合わせて目を通しておくことをオススメします。(明確な違いとしては「ジョブスケジューラの有無」に言及。CoreではAirflow等を使ってジョブを実行させなければならないが、dbt Cloudではジョブスケジューラが提供されています)
機能・環境・ケースにおける違い
ここからはより細かく、ユースケースやトピックに対して「dbt Coreではどうなのか、dbc Cloudではどうなのか」をそれぞれ見ていきます。
クラウド統合開発環境(IDE)
ポイント | dbt Core | dbt Cloud |
---|---|---|
クラウド統合開発環境(IDE) | 機能提供:ー dbt Coreはコマンドラインツールなのでdbtプロジェクトを構築、テスト、デプロイするためのクラウドベースのIDEはありません。dbtプロジェクトに編集および管理に、VSCodeなどのローカルIDEを活用することが可能です。 |
機能提供:○ dbt プロジェクトの構築、テスト、バージョン管理、デプロイのための組み込みのクラウド統合開発環境(IDE)が提供されます。IDE内では、DAG (有向非巡回グラフ)でPythonモデルを表示し、dbtモデルのワークフローと接続を視覚化できます。DAG機能は dbt Coreでも利用できますが、特定のモデルのドキュメントでのみ表示できます。 |
dbt Cloudにおける詳細は下記ドキュメントをご参照ください。
「Cloud IDE Features」では、dbt Cloud IDEで出来ること、便利な機能について紹介がされています。ここではその内容から「機能」の部分を抜き出して一覧化してみました。いずれもとても便利な、助かる機能達ですね。
- Keyboard shortcuts(キーボードショートカット)
- File state indicators(ファイルの状態を表示)
- IDE version control(IDE経由でgitバージョン管理が可能に)
- Project documentation(プロジェクトのドキュメントを生成・連携)
- Preview and Compile button(プレビュー、コンパイル)
- Build, test, and run button(ビルド、テスト、実行をボタンで操作可能)
- Command bar(コマンドバー経由でdbtコマンドを実行)
- Drag and drop(ファイルエクスプローラ経由でファイルのドラッグ&ドロップ操作が可能)
- Organize tabs and files(タブとファイルを整理)
- Find and replace(検索&置換)
- Multiple selections(要素の複数選択)
- Lint and Format(ボタンクリックでコードのフォーマット・整形が可能)
- Git diff view(Gitの差分ビュー)
- dbt autocomplete(開発の高速化に役立つ各種オートコンプリート機能)
- DAG in the IDE(IDE上でDAG表示)
- Status bar(ステータスバー)
- Dark mode(ブラウザの表示モードをライト/ダークに切り替え可能)
その他参考情報:
スケジューリング機能
ポイント | dbt Core | dbt Cloud |
---|---|---|
スケジューリング機能 | 機能提供:ー dbt Core では、GitHub Actions、Gitlab CI、Airflow などの外部ツールを通じてジョブのスケジュールを管理する必要があります。任意のスケジュールツールをセットアップし、ジョブスケジュールを構成してから、スケジュールされたタスクとして dbtコマンドラインツールのコマンドを呼び出す流れです。 |
機能提供:○ 外部スケジュール ツールを設定せずに、dbt Cloud UI でジョブを直接スケジュール可能。 |
dbt Core(で提供されているコマンド)ではスケジュールに関する機能は提供されていません。このため、個別にジョブスケジュール機能を持つサービスと連携させる形で、dbt Coreのコマンドを実行する必要があります。以下はその一例です。
- Airflow and dbt Cloud | dbt Developer Hub
- Cloud Run Jobsでdbtを定期実行する方法 | Hakky Handbook
- Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみた | DevelopersIO
dbt Cloudでは「スケジューリング機能」が提供されています。
APIサポート
ポイント | dbt Core | dbt Cloud |
---|---|---|
APIサポート | 機能提供:ー |
機能提供:○ |
dbt CoreではAPIサポートはありません。Elementary等の外部ツールを使ってプロジェクトの実行からメタデータを収集できるようですが、dbt Cloud が提供する管理APIを置き換える代替手段はありません。
dbt Cloudではチームおよびエンタープライズ プラン向けに、dbt Cloud Administrative API と dbt Metadata API の2 つの APIが提供されています。
- 管理APIを使用すると、ジョブの開始、アーティファクトのダウンロード、dbt アカウントの管理が可能になります。
- メタデータ API はプロジェクトに関する情報を提供し、プロジェクトの品質と効率の向上に役立ちます。
dbt CloudにおけるAPIの詳細については下記ドキュメントをご参照ください。(Overviewを見てみると新しく「Semantic Layer APIs」というのも利用出来るようになっていますね...!)
- dbt Cloud Administrative API | dbt Developer Hub
- About the Discovery API | dbt Developer Hub
- Semantic Layer APIs | dbt Developer Hub
ドキュメント機能
ポイント | dbt Core | dbt Cloud |
---|---|---|
ドキュメント機能 | 機能提供:△ dbt Coreでは、ドキュメントはローカルプロジェクトディレクトリに作成されます。 |
機能提供:○ dbt Cloudではドキュメント作成に加えてドキュメントのホストも合わせて環境下で対応可能。 |
dbt Coreでは、dbt docs
コマンドを使ってプロジェクトのドキュメントを生成することが出来ます。
但し、出来るのはドキュメント生成まで。作成したドキュメントをチームメンバーに広く共有するとなった場合、別途何らかのサービスを使ってドキュメントを公開する必要があります。dbtではAmazon S3やNetlifyを使ってドキュメントをホストする手順が展開されていたりします。
- About documentation | dbt Developer Hub
- dbt docsで作成したドキュメントをAmazon S3でホスティングする
- dbt docsをs3でホスティングする【Terraformでの実装付】 | Hakky Handbook
- Publishing dbt Docs to Netlify - Show and Tell - dbt Community Forum
dbt Cloudではサービスの機能として「ドキュメントのホスト」も合わせて対応しています。実行のたびにドキュメントを自動的に更新するオプションを選択でき、ドキュメントは最新の状態に保たれ、dbt プロジェクトの最新の変更が反映されます。生成されたドキュメントはCloud IDEから直接アクセス可能です。(下記エントリ「13.モデルに対してドキュメントを生成」ではdbt Cloud上におけるドキュメント作成・閲覧の一連の流れを御確認頂けます)
セマンティックレイヤーサポート
ポイント | dbt Core | dbt Cloud |
---|---|---|
セマンティックレイヤーサポート | 機能提供:ー |
機能提供:○ |
セマンティックレイヤーは「データとビジネスユーザーの間に位置する翻訳層であり、複雑なデータを理解可能なビジネスコンセプトに変換するもの」です。(※ 参考1 参考2)
この機能については、dbt Coreでは対応、提供していません。Looker の LookML は、dbt Core の dbt クラウド セマンティックの機能の一部を提供できますが、ビジネス インテリジェンスのユースケースに限定されており、他のダウンストリームプロセスはサポートできません。
dbt Cloudでは、このセマンティックレイヤーに対応しています。セマンティックレイヤーを活用する事でさまざまなユースケース間でのメトリクスの重複を回避し、信頼できる単一の情報源を作成することが出来ます。一貫性を維持することで、BI アナリストは正確な洞察にアクセスし、データに基づいた意思決定を行うことができます。(注:2023年10月初旬時点では、dbt Semantic Layerはまだパブリックプレビューのようです)
セマンティックレイヤーに関しては、Lookerとdbtの比較と絡めて下記エントリで詳細に言及されているものがありますので是非合わせてチェックしてみてください。
継続的インテグレーション(CI)
ポイント | dbt Core | dbt Cloud |
---|---|---|
継続的インテグレーション(CI) | 機能提供:ー dbt CoreでCIを実現する場合、サードパーティのCIツールと連携・設定する必要があります。コードベースに変更があるたびに、テストの実行や新しいモデルのデプロイなどの dbt コマンドを自動的にトリガーするようにこれらのツールを構成・設定していくイメージです。 |
機能提供:○ dbt Cloud には CI 機能が組み込まれているため、サードパーティのツールを使用する必要はありません。 |
dbt CloudではGitベースのワークフローをサポートしているため、変更をGitリポジトリにプッシュし、CIプロセスを自動的にトリガーできます。dbt Cloudの組み込みCI機能は、テストとチェックの実行、モデルの構築とデプロイ、関係者への通知の送信を行うように構成できます。
セキュリティ
ポイント | dbt Core | dbt Cloud |
---|---|---|
セキュリティ | 機能提供:ー 基本的に自己ホスト型であることを考えると、セキュリティは、それを導入する組織の慣行とインフラストラクチャに依存します。これによりカスタムのセキュリティ対策が可能になりますが、セキュリティプロトコルを維持および更新する責任も組織に課せられます。 |
機能提供:○ dbt Cloud はマネージド サービスとして、組み込みのセキュリティ機能を提供します。定期的なアップデート、暗号化プロトコル、コンプライアンス認証がパッケージに含まれているため、ユーザーはセキュリティ侵害を心配することなくデータタスクに集中できます。 |
dbt Coreにはセキュリティに関する設定、操作のコマンドは提供されていないので、関連するものは自分で整える必要があります。
dbt Cloudでは下記ドキュメントで言及・展開されているような様々なセキュリティ観点について考慮、対応が為されています。
コミュニティサポート
ポイント | dbt Core | dbt Cloud |
---|---|---|
コミュニティサポート | 機能提供:△ |
機能提供:○ |
dbtでは「コミュニティフォーラム」と「dbtコミュニティSlackチャンネル」を利用することが出来ます。コマンド ライン(CLI) で開発していて、質問がある場合やヘルプが必要な場合はこれらの場所を通じて役立つ情報が得られるでしょう。
コミュニティでの振る舞いについては下記ドキュメントでガイドラインとしてまとめられています。是非参考にしてみてください。
その他、dbt Cloudではチャットサービスが提供されています。(Enterpriseプランユーザーの場合は優先対応してもらえるメリットも)。詳細は下記エントリをご参照ください。
まとめ
という訳で、dbt Coreとdbt Cloudの違いについて、様々なポイント、切り口でその内容をまとめてみた紹介でした。
利用ユーザーの組織における状況によって判断・評価ポイントは異なるので一概にこう!とは言い切れませんが、「本番環境を想定した複数人体制での運用」ということを考えると、やはりどこかでdbt Cloudの利用を検討頂くのが現実的な流れなのかなぁ...と思った次第です。(コマンドラインやSQL、Git等を理解実践出来るエンジニアがいればdbt Core及びdbt Core+αで運用し続けていくことは可能とも思いますが、これはこれで大変そうだな、という印象もある)
このエントリがdbt Coreと、dbt Cloud、どちらをどのように利活用していくか検討されておられる方々の参考になりますと幸いです。