お問い合わせ
およそ3 分で読むことができます。

dbtCloudとdbtCoreのハイブリッド利用

2023年12月29日

はじめに


dbtにはOSS版の「dbtCore」とSaaS版の「dbtCloud」があります。

dbtCoreは無料かつ開発を楽にするPythonライブラリを使用できますが、dbtCloudのデプロイ機能やCI機能などが搭載されていません。

しかし、dbtCloudでは、dbt-osmosisといったdbt用のPythonライブラリが使えず、複数人で開発するケースだと、1シート(ユーザ)あたり100ドルかかってしまいます。

実は、dbtCloudで初期化したリポジトリをdbtCoreでクローンし、profiles.yml等の認証設定ファイルを設定するだけで、dbtCloudとdbtCoreを併用して開発・デプロイすることができてしまいます。

 

前提

  • 先にdbtCloudでプロジェクトを作成している
  • バージョン管理はGitHubを使用

 

環境

  • dbtCloud
  • dbtCore(今回はDockerですがPythonが使えればローカルやvenvでも○)
  • VSCode
  • GitHub
  • Snowflake

 

事前準備

  • GitHubで空のリポジトリを作成

 

環境構築

dbtCloud

作成したリポジトリを元にdbtプロジェクトを作成、初期化します。

 

ブランチ作成

以下の作業ブランチを使用します。

  • main
  • dev_dbtcore(GitHubから作成)
  • dev_dbtcloud(dbtCloudから作成)

branches

 

dbtCore

dbtCoreの環境構築は、以下記事のGit連携まで進めます。
https://knowledge.insight-lab.co.jp/bi/-dbtcore-simple-start

 

この記事の中で、CLONEするgitリポジトリをdbtCloudで初期化したリポジトリで行います。

 git clone xxxxxxx.git

※ユーザ名とトークンを入力

 

dbtCoreをインストールします。

python -m pip install dbt-snowflake

dbtcore_install

 

~/.dbt/profiles.ymlを作成

my_new_project:
  target: dev
  outputs:
    dev:
      type: snowflake
      account: xxxxxxxxx.ap-northeast-1.aws
      database: xxxxxxxxxxxx
      password: xxxxxxxxxxxx
      role: xxxxxxxxxxxx
      schema: dev_uta
      user: xxxxxxxxxxxx
      warehouse: xxxxxxxxxxxx

 

ブランチをdev_dbtcoreに切り替えます。

branche_checkout

 

dbtCloudで既にinitしているため、profile設定が’default’になっています。ここをprofiles.ymlに設定した名称に変更します。

dbt_project

 

以下のコマンドを実行し、dbtCoreの設定に不足なく正しく動作する状態か確認します。

dbt debug

dbtcore_debug

 

実行確認

 

dbtCore

dbtCloudで作成していたモデルを実行してみます。

dbt run --select stg_sale

dbt_run

 

Snowflake側にモデルのSQLが実行されています。

dbt_results

 

GitHub

変更をCommit/Syncします。

commit

 

GitHubを確認すると、origin/dev_dbtcoreに変更が来ているので、プルリクを作成。

pull_request

 

mainブランチにマージします。

merge

 

dbtCloud

mainブランチへのマージが完了すると、Version controlがPull fom “main”に変わります。

dbtcloud_pull

 

Pullが完了するとprofileの記述が、dbtCoreで編集した内容に変更されます。

dbtcloud_results

 

おわりに

今回は、dbtCloudで使用していたリポジトリをDockerコンテナ上でクローンし、dbtCoreとdbtCloudの両方で併用できるか検証しました。

dbtCoreで開発し、dbtCloudでデプロイするといったハイブリッドな利用ができると、開発メンバーが何人いても無料で開発を行い、デプロイはdbtCloud1アカウントの契約だけで利用できるので、コスト削減になります。

また、dbtCoreで開発作業ができると、dbt開発を加速させるPythonライブラリを使用することができるので、是非お試し下さい。

 

Topics: dbtCore dbtCloud
uta

Written by uta

野良猫を見かけると追わずにはいられません。