SnowflakeにローカルPCのAnaconda環境のjupyter notebookから接続

SnowflakeにローカルPCのAnaconda環境のjupyter notebookからつないでみました。
トライアルのSnowflake環境です。

Anacondaはインストール済みです。

# 仮想環境作成
まずはAnacondaの仮想環境を作成します。
![スクリーンショット 2024-09-20 212224.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/5cdd60af-56b0-f374-ccf1-a8b02465d081.png)
左メニューの「Environments」を選んで、画面下部の「Create」をクリックします。

![スクリーンショット 2024-09-20 212422.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/746cf191-6061-152e-e1a0-216e13f195b1.png)
するとこんな小画面が出てくるのでNameに今回は「SnowparkTest」と入れました。
「Create」をクリックします。

![スクリーンショット 2024-09-20 212701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/e9bafc7c-6a93-9c12-2220-67e50942f501.png)

SnowparkTestというのが新たに出てきます。
次に左メニューの「Home」をクリックします。

![スクリーンショット 2024-09-20 213155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/3e3db6d0-97ca-6372-0334-c8da81382e32.png)
いろんなアイコンが並んでる上にドロップダウンリストで「SnowparkTest」が選択状態であることを確認します。
いろんなアイコンのうち、「jupyter notebook」のインストールをクリックします。（右から2番目、上から2番目）
![スクリーンショット 2024-09-20 213354.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/37eba9c3-f3d7-f34b-a17f-51379bd2b677.png)
インストールが終わるとLaunchにボタン名が変わります。
クリックします。
すると、ブラウザが起動します。
ここからはブラウザに操作画面が移ります。

# jupyter notebookでの操作
![スクリーンショット 2024-09-20 213505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/0ccec260-11fa-8fc0-1ac1-e3ca8fba1f60.png)
私の場合は
/workspace
がAnacondaの初期フォルダです。
その下に「SnowparkTest」フォルダを作成しました。
フォルダ作成は右上の「▼New」から行えます。
次に同じ「▼New」から「Python 3（ipykernel）」でPythonのファイルを作成します。
![スクリーンショット 2024-09-20 213534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/5dd81339-f35a-a07d-287e-745ec27f47e8.png)
Untitledというファイル名でファイルができるとこのような画面になります。

ここからはこの環境に必要なライブラリをインストールしていきます。

```
pip install snowflake-snowpark-python
```
これが必要なライブラリ：snowflake-snowpark-pythonです。
![スクリーンショット 2024-09-20 213736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/efe3f986-9c59-4fa8-7749-ce5aea14e096.png)
この画面では切れちゃってますが、最後にカーネルのリスタートをすべしみたいな英語のメッセージが出ていたので従います。
画面上部のメニューに「Kernel」というのがありますので、そこから「Restart」を選びます。
![スクリーンショット 2024-09-20 213827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/1f4a5d1d-1984-164c-70fb-dc3210ca9e0f.png)
こんな確認メッセージが出るので「Restart」です。

```
pip install numpy
pip install pandas
```
もついでにやっておきました。使わないけど。
これでやっと環境準備が整いました。

# Snowflakeへの接続設定
Pythonファイルと同じフォルダに「cred.json」というテキストファイルを作ります。
※jsonファイルの名前はなんでもいいです。
![スクリーンショット 2024-09-20 214639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/4bc1c62e-ed1b-f18d-8b8f-54540665b836.png)
Snowflakeへの接続情報です。
- account
- user
- password
- role
- warehouse
を定義しておきます。
※このアカウントはSnowflakeトライアル環境のものです。

![スクリーンショット 2024-09-20 214750.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/617c029f-9bb7-5806-8df7-f3de6e48b444.png)
こんな感じで「Untitled.ipynb」と「cred.json」が同じ階層に存在するようにします。

# Snowflakeにつないでみる
ではjupyter notebookで以下を入力します。

```
from snowflake.snowpark import Session
import json
session = Session.builder.configs(json.load(open('cred.json'))).create()
```
![スクリーンショット 2024-09-20 215318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/912ee4db-2209-c7a1-1706-8c6a2e24b7a3.png)

実行するとここではまだ何も起こりませんが、cred.jsonを読み込んでSnowflakeに接続はしています。
続けて以下を入力して実行します。
```
tableName = "TEST_DB.TEST_SCHEMA.TRIPS"
df = session.table(tableName).limit(10)
df.show()
```
DB：TEST_DB
スキーマ：TEST_SCHEMA
テーブル：TRIPS
から上限10件で取得します。
なおこの"TEST_DB.TEST_SCHEMA.TRIPS"は以前の下記の記事の際に作ったものです。

https://qiita.com/baihebu/items/c1f2166bd1e60b3e1f40

実行します。
![スクリーンショット 2024-09-20 215336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/e8fec7c8-57ce-67f7-bebe-583c0cd597b1.png)
出力が表形式じゃないので見づらいですが、ちゃんと結果が取れました。
パイソニスタはこれでいろいろできちゃうということですね。

比較用
![スクリーンショット 2024-09-20 215426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/ee180db7-1ef7-5e2b-b460-f751b613c3ba.png)
Snowsightで見るとこんな感じです。

# あとがき
最近はSnowflakeの中にnotebookができていて、こんなことをしなくてもPythonが使えるらしいとは聞いていますが、まだ自分はそこまでキャッチアップできていないので、古の手法でつないでみました。

認証情報をjsonファイルに書いておくという形をとったのですが、SSO環境の場合はどうなるのかというのは謎です。
次はSSOの会社環境を使って試してみようと思います。（自信なし。）