お問い合わせ
5 分で読むことができます

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

執筆者 bird 更新日時 2023年8月14日

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

目次

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

自動デプロイの流れ

システム図2-1

開発者が作業した変更を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」を呼び出します。

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

variable

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

・deploy_snowflake.py

処理の流れとしては、

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

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

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

・test_bitbucket.sql

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

動かす

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

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

ローカルからpush

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

commit

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

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

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

commit2

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

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

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

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

query詳細

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

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

 

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

ローカルからpush2

~masterへのmergeまで割愛~

commit3

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

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

Snowflakeを体験してみませんか?

INSIGHT LABではSnowflake紹介セミナーを定期開催しています。Snowflakeの製品紹介だけでなく、デモンストレーションを通してSnowflakeのシンプルなUI操作や処理パフォーマンスの高さを体感いただけます。

詳細はこちら

bird

執筆者 bird

4 分で読むことができます。
Snowflakeの料金体系|クレジットと費用最適化のポイントをご紹介
5 分で読むことができます。
【禁断の比較?】SnowflakeとTreasure Dataを比べてみました
1 分で読むことができます。
誤ってupdateしてしまったレコードをtime travelで復元する
3 分で読むことができます。
AWS Lambdaを使ってSnowflakeとSFTPサーバーを連携してみた
6 分で読むことができます。
【Snowflake】初めてStreamを使ったデータパイプライン構築をした話