Snowflake ワークシートを Git で共有&管理する試み
はじめに
Snowflake でアドホックな集計やクエリ調査、リカバリ作業をしたときのワークシートを、チーム内で共有することがよくあります。そう、よくあるんです。結構頻繁に発生するのです。
そんなとき、ワークシートでの操作1つで共有できるのはとても便利ですよね。
しかしながら、アカウントを超えてワークシートを共有したいときって、あるじゃないですか?
そんなときに便利そうなパッケージがこちら。
Snowflake ワークシートを Git でバージョン管理するためのパッケージです。このパッケージをちょっと使ってみたので、ご紹介します。
使ってみる
sf_git のインストール手順は 本家README を参照。
環境設定
sf_git をインストールしたら、まずは Git 連携対象とする Snowflake アカウントの情報を登録。
$ sfgit config --git-repo /home/sf
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
Set SNOWFLAKE_VERSIONING_REPO to /home/sf
sf_git.conf
設定の本体はこのファイルらしい。
$ cat /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
SNOWFLAKE_VERSIONING_REPO='/home/sf'
WORKSHEETS_PATH='/tmp/trash/worksheets'
SF_ACCOUNT_ID='tofill.west-europe.azure'
SF_LOGIN_NAME='TOFILL'
ワークシート保存先ディレクトリを指定する。
$ sfgit config --save-dir /home/sf/worksheets
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
Set WORKSHEETS_PATH to /home/sf/worksheets
sf_git.conf
WORKSHEETS_PATH が置き換わった。
$ cat /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
SNOWFLAKE_VERSIONING_REPO='/home/sf'
WORKSHEETS_PATH='/home/sf/worksheets'
SF_ACCOUNT_ID='tofill.west-europe.azure'
SF_LOGIN_NAME='TOFILL'
他の項目も設定していく。
$ sfgit config --account xy00000.ap-northeast-1.aws
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
Set SF_ACCOUNT_ID to xy00000.ap-northeast-1.aws
$ sfgit config --username m.kajiya
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
Set SF_LOGIN_NAME to m.kajiya
sf_git.conf
$ cat /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
SNOWFLAKE_VERSIONING_REPO='/home/sf'
WORKSHEETS_PATH='/home/sf/worksheets'
SF_ACCOUNT_ID='xy00000.ap-northeast-1.aws'
SF_LOGIN_NAME='m.kajiya'
ワークシートを取得する
sfgit fetch
を実行。ここではパスワード認証で実行してみる。
$ sfgit fetch --username "m.kajiya" --account-id "xy00000.ap-northeast-1.aws" --auth-mode PWD --password "<your_password>"
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
## Authenticating to Snowsight ##
auth with m.kajiya and <your_password>
## Authenticated as m.kajiya##
## Getting worksheets ##
[Worksheets] Saving to /home/sf/worksheets
[Worksheets] Saved
## Got worksheets ##
_id ... content_type
0 2XkUyegck0R ... sql
1 3gbi0mGqyFg ... sql
2 278LmLA1XCR ... sql
3 4i679ZspIon ... sql
4 4spSGf2b1tv ... sql
5 2Jt3Jrm2BuN ... sql
6 2MhNtBmpQ1G ... sql
7 3L7P0n7EzTQ ... sql
8 4bsVTXMVs8F ... sql
[9 rows x 6 columns]
## Worksheets saved to /home/sf/worksheets ##
9 rows
Snowflake アカウントで作成したワークシートと同数。削除したワークシートは数に入っていない。
実体は、ワークシートの内容をそのまま保存した sql ファイルと[1]、ワークシートに対応するメタデータファイル(JSON)になっている。
こんな感じ(シート名が雑すぎてたいへん見苦しいが、気にしてはいけない)
$ ls -aR ./worksheets/
./worksheets/:
.
..
.2023-07-19_9_10pm_metadata.json
.2023-07-29_2_28pm_metadata.json
.NativeApps_metadata.json
.Query_-_01ade902-0001-058d-0000-2db50023a542_metadata.json
.SNOWFLAKE_SAMPLE_DATA__metadata.json
.SnowDemo_metadata.json
.Streamlit_Privileges_Script_for_Admin_metadata.json
.add_new_sheet_metadata.json
.create_sf_git_users_metadata.json
2023-07-19_9_10pm.sql
2023-07-29_2_28pm.sql
Import_2023-01-17
NativeApps.sql
Query_-_01ade902-0001-058d-0000-2db50023a542.sql
SNOWFLAKE_SAMPLE_DATA_.sql
SnowDemo.sql
Streamlit_Privileges_Script_for_Admin.sql
add_new_sheet.sql
create_sf_git_users.sql
./worksheets/Import_2023-01-17:
.
..
.grant_ACCOUNTADMIN_metadata.json
.share_metadata.json
grant_ACCOUNTADMIN.sql
share.sql
ワークシートをコミットする
次に sfgit commit
コマンドで、ワークシートのファイルを Git に登録してみる。
$ sfgit commit
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
## Committed worksheets to branch main
何が起きているのかというと、ワークシート保存ディレクトリ下のファイルを自動的にステージングして、自動的にコメント付けてコミットしている、というわけ。
(コメントと、対象ブランチは sfgit commit
コマンドのオプションで指定可能)
$ git log --name-only
commit da8ba6d57b143f7fc0247a6004e79b9ef6ba7642 (HEAD -> main)
Author: ***********
Date: Sat Feb 17 11:42:10 2024 +0000
[UPDATE] Snowflake worksheets
worksheets/.2023-07-19_9_10pm_metadata.json
worksheets/.2023-07-29_2_28pm_metadata.json
worksheets/.NativeApps_metadata.json
worksheets/.Query_-_01ade902-0001-058d-0000-2db50023a542_metadata.json
worksheets/.SNOWFLAKE_SAMPLE_DATA__metadata.json
worksheets/.SnowDemo_metadata.json
worksheets/.Streamlit_Privileges_Script_for_Admin_metadata.json
worksheets/2023-07-19_9_10pm.sql
worksheets/2023-07-29_2_28pm.sql
worksheets/Import_2023-01-17/.grant_ACCOUNTADMIN_metadata.json
worksheets/Import_2023-01-17/.share_metadata.json
worksheets/Import_2023-01-17/grant_ACCOUNTADMIN.sql
worksheets/Import_2023-01-17/share.sql
worksheets/NativeApps.sql
worksheets/Query_-_01ade902-0001-058d-0000-2db50023a542.sql
worksheets/SNOWFLAKE_SAMPLE_DATA_.sql
worksheets/SnowDemo.sql
worksheets/Streamlit_Privileges_Script_for_Admin.sql
ワークシートを更新する
Git 側でワークシートを更新して、Snowflake ワークシートに反映してみたい。
ということで、Git側でワークシートファイルを操作してみる。
① ワークシートを Git 側で追加する
add_new_sheet.sql
を追加、一緒に .add_new_sheet_metadata.json
も追加する。
② ワークシートの内容を Git 側で変更する
Query_-_01ade902-0001-058d-0000-2db50023a542.sql
を変更。
$ git status
On branch main
Your branch is ahead of 'origin/main' by 3 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: worksheets/Query_-_01ade902-0001-058d-0000-2db50023a542.sql
Untracked files:
(use "git add <file>..." to include in what will be committed)
worksheets/.add_new_sheet_metadata.json
worksheets/add_new_sheet.sql
コミットしてみる。
# sfgit commit
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
## Committed worksheets to branch main
# git log --name-only
commit 16e300220566adddca9fd057b21d5c36d63f09ea (HEAD -> main)
Author: ***********
Date: Sat Feb 17 11:57:05 2024 +0000
[UPDATE] Snowflake worksheets
worksheets/Query_-_01ade902-0001-058d-0000-2db50023a542.sql
worksheets/.add_new_sheet_metadata.json
worksheets/add_new_sheet.sql
追加したもの、更新したものがコミットされているようす。
それでは、Snowflake ワークシートに反映してみよう。 sfgit push
コマンドを実行する。
$ sfgit push \
--username "m.kajiya" \
--account-id "xy00000.ap-northeast-1.aws" \
--auth-mode PWD --password <your_password>
loading dotenv from /usr/local/lib/python3.10/site-packages/sf_git/sf_git.conf
## Authenticating to Snowsight ##
## Authenticated as m.kajiya##
## Getting worksheets from cache for user m.kajiya ##
[Worksheets] Loading from /home/sf/worksheets
## Got worksheets ##
_id ... content_type
0 2XkUyegck0R ... sql
1 3gbi0mGqyFg ... sql
2 2Jt3Jrm2BuN ... sql
3 4i679ZspIon ... sql
4 278LmLA1XCR ... sql
5 4spSGf2b1tv ... sql
6 2MhNtBmpQ1G ... sql
7 3WQcEs0huax ... sql
8 3L7P0n7EzTQ ... sql
9 4bsVTXMVs8F ... sql
[10 rows x 6 columns]
## Uploading to SnowSight ##
## Writing local worksheet to SnowSight for user m.kajiya ##
updating worksheet 2023-07-19 9:10pm
updating worksheet 2023-07-29 2:28pm
updating worksheet NativeApps
updating worksheet SNOWFLAKE_SAMPLE_DATA
updating worksheet SnowDemo
updating worksheet Streamlit Privileges Script for Admin
creating worksheet add_new_sheet
updating worksheet grant ACCOUNTADMIN
updating worksheet share
## SnowSight updated ##
## Uploaded to SnowSight ##
Snowsight でワークシートを確認すると...
Git 側での変更が反映されていますね。
おわりに
Git への連携ができると、アカウントを超えてクエリ共有ができて良いですね。アカウント間での共有も試してみたいと思っています。
さらに、Snowflake ワークシートを push できる GitHub Actions もあるので、こちらも試してみたいです!
-
Python があれば Python も出てくると思われる ↩︎
Discussion