はじめに
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から作成)
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
~/.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に切り替えます。
dbtCloudで既にinitしているため、profile設定が’default’になっています。ここをprofiles.ymlに設定した名称に変更します。
以下のコマンドを実行し、dbtCoreの設定に不足なく正しく動作する状態か確認します。
dbt debug
実行確認
dbtCore
dbtCloudで作成していたモデルを実行してみます。
dbt run --select stg_sale
Snowflake側にモデルのSQLが実行されています。
GitHub
変更をCommit/Syncします。
GitHubを確認すると、origin/dev_dbtcoreに変更が来ているので、プルリクを作成。
mainブランチにマージします。
dbtCloud
mainブランチへのマージが完了すると、Version controlがPull fom “main”に変わります。
Pullが完了するとprofileの記述が、dbtCoreで編集した内容に変更されます。
おわりに
今回は、dbtCloudで使用していたリポジトリをDockerコンテナ上でクローンし、dbtCoreとdbtCloudの両方で併用できるか検証しました。
dbtCoreで開発し、dbtCloudでデプロイするといったハイブリッドな利用ができると、開発メンバーが何人いても無料で開発を行い、デプロイはdbtCloud1アカウントの契約だけで利用できるので、コスト削減になります。
また、dbtCoreで開発作業ができると、dbt開発を加速させるPythonライブラリを使用することができるので、是非お試し下さい。