【分析基盤】snowparkを使用して試しにnotebookからアクセスをしてみました。

## 初めに
　snowparkは、クラウド型データウェアハウスである「Snowflake」の大規模なデータのクエリ、処理を実行する為のライブラリを提供します。このライブラリを使用することで、Snowflake上でデータをライブライ(Snowflake API)経由で処理をすることができます。

■　公式ドキュメント

https://docs.snowflake.com/ja/developer-guide/snowpark/python/creating-session


## アナコンダ上の仮想環境

Anacondaの仮想環境から、condaコマンドよりpythonの仮想環境を作成します。

```bat
(base) C:\Users\user>conda create --name py38_env --override-channels -c https://repo.anaconda.com/pkgs/snowflake python=3.9 numpy pandas pyarrow
```
その後、snowparkのライブラリをインストールしてみます。
下記のようにライブラリのインストールが進んでいきます。

```bat
(base) C:\Users\user>conda install snowflake-snowpark-python
  added / updated specs:
    - snowflake-snowpark-python


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    asn1crypto-1.5.1           |  py312haa95532_0         210 KB
    ca-certificates-2025.2.25  |       haa95532_0         130 KB
    certifi-2025.1.31          |  py312haa95532_0         164 KB
    conda-24.11.3              |  py312haa95532_0         1.2 MB
    openssl-3.0.16             |       h3f729d1_0         7.8 MB
    snowflake-connector-python-3.14.0|py312h5da7b33_100         1.9 MB
    snowflake-snowpark-python-1.29.1|py312haa95532_100         2.7 MB
    tzlocal-5.2                |  py312haa95532_0          43 KB
    ------------------------------------------------------------
                                           Total:        14.1 MB

The following NEW packages will be INSTALLED:

  asn1crypto         pkgs/main/win-64::asn1crypto-1.5.1-py312haa95532_0
  snowflake-connect~ pkgs/main/win-64::snowflake-connector-python-3.14.0-py312h5da7b33_100
  snowflake-snowpar~ pkgs/main/win-64::snowflake-snowpark-python-1.29.1-py312haa95532_100
  tzlocal            pkgs/main/win-64::tzlocal-5.2-py312haa95532_0

The following packages will be UPDATED:

  ca-certificates                       2024.7.2-haa95532_0 --> 2025.2.25-haa95532_0
  certifi                          2024.7.4-py312haa95532_0 --> 2025.1.31-py312haa95532_0
  conda                              24.7.1-py312haa95532_0 --> 24.11.3-py312haa95532_0
  openssl                                 3.0.14-h827c3e9_0 --> 3.0.16-h3f729d1_0


Proceed ([y]/n)? y


Downloading and Extracting Packages:

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
```


## notebookから実行
下記のようにjupyter notebookを起動します。
```bat
(base) C:\Users\user>jupyter notebook
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381629/c5ced833-c939-48c6-8246-adcbe6a640c9.png)

ここで認証情報を下記のjsonのように設定しています。
これはsnowflakeのアカウントのページの詳細から確認することができます。

```json
{
    "account" : "xxxxxxxxxxxxxxxx",
    "user" : "xxxxxxx",
    "password" : "xxxxxxxxxxxx",    
    "role" : "ACCOUNTADMIN"
}
```
上記のファイルを、notebookの同じフォルダに「cred.json」と指定して読み込みを実施します。

下記のようにsessionにデータフレームのオブジェクトを作成することができる。
```python
tableName = "MY_DB.MY_SCHEMA.RECEIPT"
df = new_session.table(tableName).limit(10)
df.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381629/4b460916-8c58-4c67-b005-7e5197424a83.png)

下記のようにオブジェクトをjoinして、selectを実施することも可能です。
```python
joined_df = df.join(df2, df["SALES_EPOCH"] == df2["SALES_YMD"])
joined_df.select("SALES_YMD").show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381629/f9e5dc60-4740-4626-b7fc-3c81368cfc94.png)

## 最後に
　今回は、snowparkのライブラリを使用してローカルの開発環境から、snowflakeのDWH上のテーブルにアクセスしてみました。もう少し今後はDataFrameの扱いを見ていきたいですね。