dbt Cloudとdbt-core (CLI)の違いを整理してみた

dbt cloudとdbt core (CLI)は、何が違うかを整理してみました。

こんにちは、nkhrです。

dbtというツールをご存じでしょうか。データウェアハウス(レイクハウス)のTransformationをサポートするツールで、Redshift, Snowflake, BigQuery, Databricsなどで利用できます。

(参照リンク:What, exactly, is dbt?

dbtの利用を開始する場合は、SaaS製品のdbt Cloudを利用する方法と、Open Sourceのdbt-coreのみを利用する方法があります。

本ブログでは、dbt Cloudとdbt-coreについて、その違いと選択ポイントについて考えてみたいと思います。

dbt Cloudとdbt-coreの違い

dbt Cloudとdbt-coreは、両方「dbt Labs, Inc.」が管理しています。

  • dbt-core
    • Apache License 2.0(詳細はリンク先を参照)で利用可能
    • dbtコマンドとコマンドを利用するためのCLIインタフェースを提供
    • dbt command一覧
  • dbt Cloud
    • SaaS製品
    • dbt-coreをベースに開発・デプロイなどの機能を提供
    • planはDeveloper, Team, Enterpriseに分かれている(2022/02時点)

dbt Cloudとdbt-coreで提供される機能

dbt Cloudとdbt-coreで提供される主な機能を書きだしてみました。

Package利用やテスト、ドキュメント生成などの機能はdbt-core機能(コマンド)のため、どちらでも利用できます。

dbt Cloudの機能

dbt Cloudは、dbt-coreにプラスしてデータ開発・デプロイのための様々な機能を提供します。

開発機能

dbtを利用した開発を1画面で行えるようにIDEが提供されます。

  • Editor
    • コードの作成のためのエディタ。ディレクトリ・ファイル表示、Git管理、dbtコマンド実行などを1画面上で実行できます
  • Data Preview
    • Editorの「Preview」ボタンをクリックすることでデータプレビュー表示可能
  • Compile View (compile自体はdbt commandの機能のためdbt coreでも利用可能です)
    • Editorの「Compile」ボタンをクリックすることでコンパイルされたSQLを表示可能
    • dbtではJinja(テンプレートエンジン)を利用して利用するテーブル名や環境依存情報をテンプレート化することができます(Using Jinja for dbt)。テンプレートをコンパイルしてSQL文を生成することをCompileと呼んでいます
    • dbt CLIを利用した場合はコンパイル結果は「target/compiled/{project name}/」に出力されます
  • Lineage Graph
    • データ生成におけるモデルのつながりを表示

ジョブ管理

ジョブ(実行するdbtコマンド)を設定し、スケジュール実行する機能が提供されます。WebHookやAPIによるジョブ実行の方式もあります。

環境変数の管理

Environments/Environment Variables機能により、環境(本番、開発、CIなど)ごとの設定や変数を管理できます。環境変数の優先度は、以下の通りです。

(参考リンク:公式ドキュメントEnvironment Variables

dbt CLI実行の場合は、prfile.yamlファイルを利用して、環境(dev, prod)ごとの接続情報や設定を管理します。

ソースコード管理(Git)

dbt Cloudでは、dbt project (yaml, sqlソースコードなど)を管理するためのgit repogitoryがデフォルトで提供されます。そのため、外部のGitツール (GitHubやGitLab)が無くとも開始できます。

しかしながら、現時点ではPull Request機能などの機能は提供されていないため、外部のGitツールを利用することが推奨されています。

機能リリースが活発なため、最新の機能については、公式ドキュメントやRelease情報(dbt Cloud changelog)を確認してください。

どちらを選んだらよいの?

dbt Cloudでは効率的なデータ開発をはじめる機能がそろっているため、どちらを利用するか悩む場合は、まずは、dbt CloudのDeveloper plan(無料)で機能を確認するところからはじめると良いと思います。

dbt-coreからはじめる場合は、projectをgit repogitory(GitHubやGitLab)で管理することで、将来的にdbt cloudへの移行も可能です。

dbt Cloud利用時の考慮点

  • SaaS製品のため、データベースに対してInternetからのInboundが発生します。dbt Cloudからのアクセス元IPアドレスは固定されているため、IPアドレス制限やSSH Tunnel設定を行うことでアクセス制限は可能です。詳しくは以下のリンクを参照してください。

    Connecting your database

  • dbt Cloudのインフラは利用者側で管理できませんが、状態が公開されており、通知設定が可能です。詳細は以下のリンクを参照してください。

    Infrastructure Instability

まとめ

今回は、dbt Cloudとdbt-coreについて利用できる機能を整理してみました。

データ利用を閉域網の前提で考えている場合、インターネット経由での利用が前提となるSaaS製品は、有用な機能であっても利用をためらわれるかもしれません。

最近のクラウド環境では、セキュリティに関するサービスが充実しています。そのため、SaaS製品の機能が有用と考えられる場合は、クラウド環境のセキュリティサービスと組み合わせて、セキュリティリスクを管理することにより、利用に向けた方針をご検討されてみてはいかがでしょうか。

以上、nkhrでした。