Snowflake Knowledge - INSIGHT LAB

Bitbucket Pipelinesを使用したSnowflakeへの簡単な自動デプロイ(実践編)

作成者: bird|2023年8月14日

CI/CDっぽいことがしたい

Create TableやCreate TaskなどのコードをGitで管理し、Snowflakeヘは手動でデプロイする。

そんな作業を経験した人はいるでしょうか。

dbtが浸透しつつある今はあまりないかもしれませんが、自分はこのような環境でデータ分析基盤の構築に携わってきました。(当時もdbtは検討したが導入に至らず)

リリース漏れや本番とmasterブランチが一致していないなど、手動によるミスも多く経験しました。

このような経緯から、簡単ではありますがBitbucketからSnowflakeへの自動デプロイをしていきたいと思います。

長くなりそうなので、始め方編と実践編の2部構成でお送りします。

前回の記事(https://knowledge.insight-lab.co.jp/snowflake/bitbucket-pipelines-snowflake-start

自動デプロイの流れ

開発者が作業した変更をpushし、masterにmergeする前のレビューのためプルリクエストを作成します。

プルリクエストが承認されたらmasterにmergeされ、それをトリガーとしてSnowflakeへのデプロイが走ります。

(記事内ではプルリクエストは省略し、直接mergeしています)

構成

 $ tree
.
|-- Snowflake
|   `-- test_bitbucket.sql
|-- bitbucket-pipelines.yml
`-- pipeline_scripts
    `-- deploy_snowflake.py

 ・bitbucket-pipelines.yml

パイプライン構成を記述するファイル。

・deploy_snowflake.py

bitbucket-pipelines.yml内で実行するpythonコマンド。

Python用Snowflakeコネクタを使用します。

・test_bitbucket.sql

テスト用のテーブルDDL。

 

また今回は、

1. 1sqlファイル1オブジェクト

2.create文のみGitで管理

という前提のもと作成しています。

作成したコード

・bitbucket-pipelines.yml

今回「snowflake-connector-python」を使用したいので、Atlassian推奨のデフォルトpythonイメージを選択しています。

最新と1つ前の状態だけを比較するため、cloneの深度は2としてます。

branchを指定することで、masterブランチにmergeされたら動くようにします。

scriptで実行したいコマンドを記述していきます。

まず「snowflake-connector-python」をインストールし、「deploy_snowflake.py」を呼び出します。

引数を渡していますが、リポジトリ変数として設定した値を上記のように呼び出すことが可能です。

今回はSnowflakeへの接続情報をリポジトリ変数に格納しています。

・deploy_snowflake.py

処理の流れとしては、

1. git diffで差分ファイルの一覧を取得

2. SQLファイルだった場合中身を実行

というデプロイ機能のみのファイルです。

・test_bitbucket.sql

テストテーブル作成用DDL。(テーブルDDLにはor replaceつけない派です。)

動かす

Snowflakeにテストテーブル格納用のデータベースとスキーマを作成します。

ローカルから作成したファイルをリモートにpushします。

コミット画面を確認します。

masterブランチで動く設定なので、まだpipelineは動きません。

masterにマージします。(実際の運用だとプルリクエスト経由しますが今回は省略)

コミット画面を確認します。

Builds欄に正常終了ステータスが表示されています。

では詳細を見てみましょう。

3ファイルとも新規追加ファイルなので差分として抽出されており、条件分岐もうまくいってそうです。

ではSnowflakeで確認してみましょう。

バッチリ作成されていますね!

クエリの詳細を見ると、PythonConnectorからクエリが発行されたことも確認できます。

 

では次は新規テーブル(test_bitbucket2)を1つ追加してみましょう。

~masterへのmergeまで割愛~

該当ファイルのみが差分として抽出されていることが確認できます。

Snowflake上もバッチリです!

おわりに

以上、簡単にですがBitbucketからSnowflakeへの自動デプロイをやってみました。

他のGitホスティングサービスと比べあまりナレッジは多くないので、この記事が誰かのお役に立てれば幸いです。

また今回のスクリプトは実運用に耐えうる代物ではないと思います。

自動テストやSQLのフォーマットなど、さらに拡張していただければこれまた幸いです。

 

参考URL

・Bitbucket Pipelines を使い始める(https://ja.confluence.atlassian.com/bitbucket/get-started-with-bitbucket-pipelines-792298921.html

・【初心者向け】bitbucket-pipelinesのキーワードとTips(https://qiita.com/mochio/items/33584357e924f55f9023

・Python用Snowflakeコネクタ(https://docs.snowflake.com/ja/developer-guide/python-connector/python-connector