Frosty Friday Week117 Snowflake CLI
こんにちは! がく@ちゅらデータエンジニアです。
こちらの3日目の記事になります。
Frosty Friday Week117 Basic Snowflake CLI
今回はSnowflake CLIのチャレンジです
先日、Frosty Friday Live Challenge Vol.14 にてSnowSQLをやったのですが、その差とかなかなか面白かったですね!
今回のチャレンジの内容
やること
- S3から次のノートブックをダウンロードします ※s3://の記法なのでリンクは後述を使ってください
- Snowflake CLI をインストールします (まだインストールしていない場合)
- ファイル経由で接続を作成しますconfig.toml(まだ作成していない場合)
- ノートブック用のステージ(NOTEBOOK_STAGE)を作成する
- ファイルをステージにアップロードする
- ステージ内のファイルからノートブックを作成する
- CLIからノートブックを開く
- ノートブックを実行する
やってみよう
Notebook をダウンロードする
S3のリンクは、s3://**** のため、直接ブラウザなどでダウンロードできません。
ダウンロードできるURLに変換しましたので、こちらから取得します。
Snowflake CLI をインストールする
ドキュメントはこちら
私は、Macを使っているので、homebrewを使う方法でまずやってみたのですが、上手くインストールができませんでした・・・
brew tap snowflakedb/snowflake-cli
brew update
brew install snowflake-cli
ってやると・・・
Last 15 lines from /Users/gaku.tashiro/Library/Logs/Homebrew/snowflake-cli/03.python:
In file included from src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp:5:
src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp:8:10: fatal error: 'memory' file not found
8 | #include <memory>
| ^~~~~~~~
1 error generated.
error: command '/opt/homebrew/Library/Homebrew/shims/mac/super/clang++' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for snowflake-connector-python
Failed to build snowflake-connector-python
[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: python -m pip install --upgrade pip
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (snowflake-connector-python)
If reporting this issue please do so at (not Homebrew/brew or Homebrew/homebrew-core):
https://github.com/snowflakedb/homebrew-snowflake-cli/issues
ってエラーが出たんですよね・・・・pipのバージョンを上げてもうまくいきませんでしたorz
で、調べていると、pipでインストールする方法があったので
pip install snowflake-cli
でインストールしました。
※ venvを使い、仮想環境にインストールする方法がおすすめされていましたが、全体で使いそうだったので、今回は(あえて)venv環境ではない全体環境(?)にインストールしました。
SnowflakeCLIのインストールが成功したかどうかは
snow --help
で確認します。
ファイル経由で接続を作成する
snowflakeCILで接続するためには、下記のコマンドを使って、接続設定を作成します。
を参考にしました。
snow connection add
で新規作成します。
Name for this connection:(必須)(接続名)
Snowflake account name:(必須)「****.ap-northeast-1.aws」の形式のアカウントID
Snowflake username:(必須) (Snowflakeに接続するユーザ名)
Snowflake password [optional]:(オプション)パスワード認証の場合(セキュリティ上あまりおすすめしないので別認証方式使いましょう)
Role for the connection [optional]:(オプション)接続時に使うSYSADMINとか
Warehouse for the connection [optional]:(オプション)接続時に使う仮想ウェアハウス
Database for the connection [optional]:(オプション)接続するDatabase名
Schema for the connection [optional]:(オプション)接続するSchema名
Connection host [optional]:(オプション)※どういうときに使うんだろう・・・
Connection port [optional]:(オプション)※どういうときに使うんだろう・・・
Snowflake region [optional]:(オプション)※入れなくてもうまく行った
Authentication method [optional]:(オプション)
Path to private key file [optional]:(オプション)秘密鍵のファイルパス
Path to token file [optional]:(オプション)使ったことがない
※注意
-
accountは、「****.ap-northeast-1.aws」の形式のアカウントIDを記載する
※<organization>.<account_id>ではダメでした。 -
Authentication method:
- SNOWFLAKE_JWT : KeyPair認証の際に指定
- externalbrowser : 外部ブラウザ認証をする(外部ブラウザが立ち上がらず認証できない事象に遭遇したが、何故か立ち上がるようになった・・・・PC再起動?うーん)
- KeyPair認証の場合、Authentication Method は「SNOWFLAKE_JWT」を指定すべし。そして、Path to private key fileに秘密鍵ファイルパスを設定する。
※Key−Pair認証を行う場合は
を参考にしてください。※snowflake cliの設定ファイルは
- ~/.snowflake ディレクトリがあれば、このディレクトリに、
config.toml
ができます - 上がなければ、
~/Library/Application Support/snowflake/config.toml
ノートブックのステージを作成する
今回、Stageオブジェクトを作ります。
パスは、FROSTY_FRYDAY.PUBLIC.NOTEBOOK_STAGE としています。
※Database名、Schma名は任意に設定してください
作り方は2パターンあって、
- snowflakeCLIでSQLを実行する方法(snow sql --query)
snow sql --query "create stage NOTEBOOK_STAGE"
- snowflakeCLIのコマンドを使う方法(snow stage create)
snow stage create @notebook_stage_2
どのオブジェクトも基本、2パターンある感じです。
ファイルをステージにアップロードする
snow stage copy frosty_nb.ipynb @frosty_friday.public.notebook_stage
このような stageへのcopyコマンドがあるので、簡単です。
subcommand:sqlならば、put コマンドを発行する感じでしょうか。
ステージ内のファイルからノートブックを作成する
こちらも2パターンやる方法があります。
- コマンド(snow notebook create)の場合
snow notebook create -f @frosty_friday.public.notebook_stage/frosty_nb.ipynb FROSTY_NOTEBOOK
- SQLを実行する場合、今回はSQLをファイルに書いてそちらのSQLファイルを
snow sql
で実行するパターン
CREATE NOTEBOOK FROSTY_NOTEBOOK_FROM_FILE
FROM '@frosty_friday.public.notebook_stage'
MAIN_FILE = 'frosty_nb.ipynb'
QUERY_WAREHOUSE = GAKU_WH;
こんなファイルを作って
snow sql --filename 6_create_notebook.sql
を実行すると、
CREATE NOTEBOOK FROSTY_NOTEBOOK_FROM_FILE
FROM '@frosty_friday.public.notebook_stage'
MAIN_FILE = 'frosty_nb.ipynb'
QUERY_WAREHOUSE = GAKU_WH;
+----------------------------------------------------------+
| status |
|----------------------------------------------------------|
| Notebook FROSTY_NOTEBOOK_FROM_FILE successfully created. |
+----------------------------------------------------------+
CLIからノートブックを開く
snow notebook open FROSTY_NOTEBOOK
をコンソールで実行すると、ブラウザが立ち上がります
ノートブックを実行する
こちらが立ち上がるので、▶Run all で実行すると・・・・・
Hello world!
って表示されますね!
Git
こちらで公開しております。
Snowflake CLIのインストール(アドバンス)
Snowflake CLIに自動補完をインストールするには、
snow --install-completion
zsh completion installed in <user home>/.zfunc/_snow
Completion will take effect once you restart the terminal
とした後、
snow --show-completion .zshrc
※.zshrc以外には、.bashrc, .bash_profileや他もできるようですが、試していないデス
としてあと、.zshrcへ追記して、source .zshrc として自動補完が有効にすることができます
Snowflake CLIのコマンドたち ( snow [subcommand] )
$ snow --version
Snowflake CLI version: 3.1.0
で使用しています。
- app -- Manages a Snowflake Native App
- connection -- Manages connections to Snowflake.
- cortex -- Provides access to Snowflake Cortex.
- git -- Manages git repositories in Snowflake.
- helpers -- Helper commands.
- init -- Creates project directory from template.
- notebook -- Manages notebooks in Snowflake.
- object -- Manages Snowflake objects like warehouses...
- snowpark -- Manages procedures and functions.
- spcs -- Manages Snowpark Container Services...
- sql -- Executes Snowflake query.
- stage -- Manages stages.
- streamlit -- Manages a Streamlit app in Snowflake.
とあります。
snow sql --help
等とするとサブコマンドのhelpを見ることができます。
かなり充実したヘルプが用意されているので、わからないことがあればこちらを参考ししてみてください。
Discussion