2023年のSnowpark for Python関連のリリースを振り返る

こちらの記事は、[Snowflake Advent Calender 2023](https://qiita.com/advent-calendar/2023/snowflake)の3日目の記事です。予定の欄を見るだけでも相当幅広く深い内容がもりだくさんなので、楽しみです！

## はじめに
Snowflakeとは、クラウド型のデータ分析プラットフォームです。コンピューティングとストレージの分離による高いスケーラビリティや、データ共有機能、ガバナンス周りの機能も豊富であることを特徴としています。それに加え、データアプリケーション関連の機能にも力を入れており、最近では**アプリ共有機能**や、LLM機能もリリース・発表されており、非常に速いリリーススピードで機能が拡充、改善されています。

特に2021年頃から**Snowpark**と呼ばれる、開発者や分析者にとって使いやすい言語（PythonやJavaなど）でSnowflake上のデータを処理できる機能が発展してきています。今回はそんなSnowparkについて、**主にPythonに絞って2023年のアップデートを振り返ってみよう**と思います。（この1年でこんだけアップデートしてるSnowflake、ヤベェよ。。。）
ちなみに、SnowparkにおけるPython機能全体を、Snowpark for Pythonと呼びます。

## リリース早見表
下記にSnowpark for Python関連機能のリリース早見表を示します。ここで、PrPrはPrivatePreview（非公開プレビュー）、PuPrはPublicPreview（公開プレビュー）、GAはGeneral Availability（一般提供）の略です。なお、本表は[公式情報](https://docs.snowflake.com/en/release-notes/new-features)を参照しているものの、常に最新・正確である訳ではないため、ご注意ください。
| カテゴリ | 機能名 | 🔏PrPr<br>／発表 | 👀PuPr | 🎉GA |
|:-:|:-:|:-:|:-:|:-:|
| 基本機能 | [Snowpark for Python 基本機能群<br>(Client API/UDFs/Stored Procedure)](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-for-python-%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD%E7%BE%A4public-preview) | 2021/12 | 2022/06 | 2022/11 |
| UDF | [Python Vectorized UDTF](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python-vectorized-udtfpublic-preview) | ー | 2023/08 | 2023/10 |
| UDF | [Python UDAF](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python-udafprivate-preview) | 2023/06 | 未 | 未 |
| ストアド | [Pythonストアド 表形式の戻り値](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3-%E8%A1%A8%E5%BD%A2%E5%BC%8F%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4public-preview) | ー | 2023/04 | 2023/08 |
| ストアド | [Anonymous ストアドプロシージャ](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#anonymous-%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3general-availability) | ー | 2022/10 | 2023/06 |
| API | [Python API](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python-apiprivate-preview) | 2023/06 | 2023/12 | 未 |
| File API | [UDF・ストアドからの<br>ステージファイルアクセス](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9public-preview) | ー | 2023/06 | 2023/10 |
| ML API | [Snowpark ML Modeling API](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-ml-modeling-apipublic-preview) | ー | 2023/06 | 2023/12 |
| MLOps | [Snowpark ML Operations API](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-ml-operations-apiprivate-preview) | 2023/06 | 2024/01<br>(一部) | 未 |
| MLOps | [Snowflake Feature Store](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-feature-storeprivate-preview) | 2023/11 | 未 | 未 |
| ML・LLM | [Snowflake Cortex ML](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371/#snowflake-cortex-mlpublic-preview) | ー | 2023/06 | 2023/12 |
| ML・LLM | [Snowflake Cortex LLM](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-cortexprivate-preview) | 2023/11 | 2024/03 | 未 |
| DevOps | [Local Testing](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#local-testingprivate-preview) | 2023/06 | 2023/12 | 未 |
| DevOps | [Snowflake CLI](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-cliprivate-preview) | 2023/06 | 2024/03 | 未 |
| DevOps | [Git Integration](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#git-integrationprivate-preview) | 2023/06 | 2024/04 | 未 |
| ランタイム | [UDF・ストアドにおける<br>Python 3.9, 3.10対応](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpython-39-310%E5%AF%BE%E5%BF%9Cpublic-preview) | ー | 2023/06 | 2023/08 |
| ランタイム | [UDF・ストアドにおける<br>Python 3.11対応](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpython-311%E5%AF%BE%E5%BF%9Cpublic-preview) | ー | 2023/10 | 2024/01 |
| ランタイム | [Pythonパッケージポリシー](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BCpublic-preview) | 2023/06 | 2023/10 | 2024/02 |
| 周辺機能 | [イベントテーブル(ログ・トレース)](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%83%AD%E3%82%B0%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9public-preview) | ー | 2023/05 | 2023/10 |
| 周辺機能 | [External Network Access](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#external-network-accesspublic-preview) | ー | 2023/09 | 2024/02 |
| コンピュー<br>ティング | [Snowpark 最適化ウェアハウス](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-%E6%9C%80%E9%81%A9%E5%8C%96%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9public-preview) | ー | 2022/11 | 2023/02 |
| コンピュー<br>ティング | [Snowpark Container Services](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-container-serviceprivate-preview) | 2023/06 | 2023/12<br>(限定) | 未 |
| アプリ | [Native Applications Framework](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#native-applications-frameworkpublic-preview) |ー  | 2023/06 | 2024/01<br>(限定) |
| アプリ | [Streamlit in Snowflake](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#streamlit-in-snowflakepublic-preview) | ー | 2023/09 | 2023/12<br>(限定) |
| Web UI | [Snowsight Pythonワークシート](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowsight-python%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88public-preview) | ー | 2023/03 | 2024/02 |
| Web UI | [Snowflake Notebooks](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-notebooksprivate-preview) | 2023/11 | 未 | 未 |

「ー」は時期が不明（調査しきれていない）であることを示します。「未」は未定であることを示します。「Soon」はSnowflakeのイベントなどで直にリリースすることを表明している場合を示します。

上表はわかりやすさのためカテゴリ別にまとめていますが、ここからは時系列順に紹介していきます。みんなにも、怒涛のリリース感を味わってほしい。

## 2022年末のリリース状況
2023年のアップデートを見ていく前に、ベースとなる2022年末のリリース状況について確認します。
### 2022年6月 
#### Snowpark for Python 基本機能群（👀Public Preview）

Snowpark for Pythonの基本機能が一気にPublic Previewとなりました！2021年末にPrPrだったので、長かったような、短かかったような・・・。とても期待感を持ってリリースを待っていたので、私個人としては非常に長く感じました。
なお、この機能がSnowpark for Pythonのベースになるので、簡単に機能を紹介しておきます。
<dl>
    <dt> 1. Snowpark API</dt>
        <dd> <a href="https://docs.snowflake.com/developer-guide/snowpark/reference/python/latest/index">他にも色々とある</a>のですが、下記では主な3つのAPIを紹介します。<dl>
        <dt> Session</dt>
            <dd> Snowflakeとのセッション作成やセッションの設定（データベースやウェアハウス、ライブラリのバージョン指定など）、データフレーム作成を行うAPIです。</dd>
        <dt> DataFrame</dt>
            <dd> チェーンメソッド式にSQLクエリを記述できるAPIです。内部ではSQLクエリに変換され、データをSnowflakeから移動することなくSnowflake上のリソースを使って処理できます。</dd>
        <dt> Function</dt>
            <dd>Pythonカスタム関数(UDF、Sproc)の登録やSnowflake組み込み関数の呼び出しが行えるAPIです。</dd>
        </dl><a href="https://docs.snowflake.com/ja/developer-guide/snowpark/python/index">公式ドキュメント: Python用Snowpark開発者ガイド</a></dd><br>
    <dt> 2. Python UDFs</dt>
        <dd> UDFとは、テーブルを行ごとに処理し、値を返すことができる関数です。UDFは複数のノードで分散処理されるため、Snowflakeのスケーラビリティを活用できます。なお、通常はSQLの中で使用し、UDF自体がテーブルやその他のオブジェクトにアクセスすることはできません。<br><a href="https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-introduction">公式ドキュメント: Python UDFsの紹介</a><dl>
        <dt> UDF（User Defined Function）</dt>
            <dd> SQLクエリ（DataFrame）の中で使用されるスカラー関数です。テーブルの行ごとに複数のノードで並列に処理されるため、スケーラブルな動作を実現できます。</dd>
        <dt> Vectorized UDF</dt>
            <dd> UDFの呼び出しを複数の行のバッチで行うことで、UDF呼び出しのオーバーヘッドを削減できる関数です。入力データをPandasのSeriesやDataFrameとして扱い、UDF内ではそのPandasデータに対する処理を記述します。<br><a href="https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-batch">公式ドキュメント: ベクトル化されたPython UDFs</a></dd>
        <dt> UDTF（User Defined Table Function）</dt>
            <dd> UDTFは、表形式の結果を返すことができるUDFです。Window関数として使用できます。<br><a href="https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-tabular-functions">公式ドキュメント: Pythonでの UDTF の記述</a></dd>
        </dl></dd>
    <dt> 3. Python Stored Procedure（Sproc）</dt>
        <dd> ストアドプロシージャでは、Snowflakeのテーブルに対して参照や更新、テーブルの作成、その他オブジェクトの操作を実行することができます。ストアドプロシージャは、シングルノードで動作します。<br><a href="https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-python">公式ドキュメント: Pythonでのストアドプロシージャの記述</a></dd>
</dl>
 
### 2022年11月
#### Snowpark for Python 基本機能群（🎉General Availability）
Snowpark for Pythonの基本機能がこれまた一気にGAとなりました！解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-for-python-%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD%E7%BE%A4public-preview)。

#### Snowpark 最適化ウェアハウス（👀Public Preview）
Snowpark for PythonのGAと同時に、このSnowpark 最適化ウェアハウスがリリースされました。

Snowflakeのコンピューティングリソースである仮想ウェアハウスは、アーキテクチャ的に各ノードに割り当てられるメモリが小さいです。そのため、Pythonストアドプロシージャで機械学習を行うなど、メモリを多く使用するユースケースに対応しづらくなります。そこで、通常の仮想ウェアハウスに比べ**16倍のメモリ**を提供するSnowpark 最適化ウェアハウスがリリースされました。

また、Snowpark最適化ウェアハウスでは、通常の仮想ウェアハウスでは行いづらかった`multiprocessing`によるCPUの並列処理も可能となっています。（これが何気に嬉しい・・・、いずれ紹介記事を出します。）

[公式ドキュメント: Snowpark用に最適化されたウェアハウス](https://docs.snowflake.com/ja/user-guide/warehouses-snowpark-optimized)

## 2023年のアップデートまとめ
Snowpark for Pythonの基本機能が揃った状態で迎えた2023年。怒涛のアップデートを見ていきましょう！（発表済みやPrivate Previewに関しては、まだPublic Previewになっていないもののみ記載しています。）

### 2023年2月
#### Snowpark 最適化ウェアハウス（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-%E6%9C%80%E9%81%A9%E5%8C%96%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9public-preview)

### 2023年3月 
#### Snowsight Pythonワークシート（👀Public Preview）
Snowsight Pythonワークシートは、SnowflakeのWeb UI（Snowsight）上でPythonコードを書き、実行することができる機能です。これにより、Snowpark for Pythonを使用してデータの操作や変換を行うことができます。


こちらは、Pythonストアドプロシージャを作成するようなイメージで、文字列や表構造のデータを出力することができますが、画像やグラフなどを出力することやSQLワークシートのように行ごとの実行はできません。

[公式ドキュメント: PythonワークシートでSnowparkコードを記述する](https://docs.snowflake.com/ja/developer-guide/snowpark/python/python-worksheets)


### 2023年4月
#### Pythonストアドプロシージャ 表形式の戻り値（👀Public Preview）
このリリースにより、結果を次のクエリで使用することやアドホックに出力を確認しながらストアドプロシージャの開発を行うことができるようになりました。現在では、SnowsightのPythonワークシートでの開発時にも当たり前のように使用されていますね。

[公式ドキュメント: 表形式のデータを返す](https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-python#label-stored-procedure-python-return-table)

### 2023年5月

#### イベントテーブル（ログ・トレース）（👀Public Preview）
Snowparkで動作しているプログラムから、ログやトレースイベントをアカウントごとに一つのイベントテーブルに保管できる機能です。UDFやストアドプロシージャ、Streamlit in SnowflakeやNative Appsで共有しているアプリからのログやトレースイベントを出力することができます。

Pythonのloggingパッケージを使用して簡単にログを出力したり、Snowflakeが提供する`telemetry`パッケージを使用して関数の呼び出しや例外の発生などをトレースしたりできます。これらは、デバッグやパフォーマンスチューニングの際に非常に役立つ機能です。

[公式ドキュメント: ログおよびトレースの概要](https://docs.snowflake.com/ja/developer-guide/logging-tracing/logging-tracing-overview)

### 2023年6月
#### Anonymous ストアドプロシージャ（🎉General Availability）
永続化する必要がないプロシージャや、CREATE PROCEDURE権限を持たないロールであっても作成できるなど、利便性が向上しています。SQLのWITH句を使用してAnonymousプロシージャを定義できます。なお、この機能は、SnowsightのPythonワークシートや、dbtのPythonモデルなどですでに活用されている機能のようです。

[公式ドキュメント: CALL （匿名プロシージャの場合）](https://docs.snowflake.com/ja/sql-reference/sql/call-with)

#### UDF・ストアドからのステージファイルアクセス（👀Public Preview）
UDFやストアド内からファイルに動的かつセキュアにアクセスできる機能です。この機能により、ググッ！っとMLやデータ加工の幅が広がりました。ファイルへのアクセスは、`SnoflakeFile.open()` APIを使用します。Python標準関数のopen関数と似たような形式で使用することができます。


また、ステージに関する新機能であるディレクトリテーブル機能と組み合わせることで、リアルタイムにステージに格納されたファイルの一覧を取得することができます。

[公式ドキュメント: Python UDF ハンドラーからのファイルの読み取り](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-examples#reading-a-file)
[公式ドキュメント: Snowpark API を使用した UDF からのファイルの読み取り](https://docs.snowflake.com/ja/developer-guide/snowpark/python/creating-udfs#label-snowpark-python-udf-read-files)
[公式ドキュメント: Pythonストアドプロシージャハンドラーからのファイルの読み取り](https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-python#label-sp-python-read-files)
[公式ドキュメント: Snowpark API を使用したストアドプロシージャからのファイルの読み取り](https://docs.snowflake.com/ja/developer-guide/snowpark/python/creating-sprocs#label-snowpark-python-sprocs-read-files)


#### Native Applications Framework（👀Public Preview）
Native Apps Frameworkにより、Snowflakeでデータアプリケーションの共有が行えるようになります。これまでSnowflakeはデータに関する共有に特化していましたが、アプリ共有としてStreamlitや関数の共有が行えるようになりました。データ共有と同様のプロバイダー・コンシューマモデルを持ちます。


共有の方法には、Marketplaceによる不特定に対する共有、PrivateListingによる特定のアカウントに対する共有があり、いずれの方法についても、無料・有料の双方でアプリの提供が可能となっています。

[公式ドキュメント: Snowflake Native App Framework について](https://docs.snowflake.com/ja/developer-guide/native-apps/native-apps-about)


#### UDF・ストアドにおけるPython 3.9, 3.10対応（👀Public Preview）
Python 3.9, 3.10では、セキュリティ的な改善はもちろん、機能的な改善も多く施されています。例えば、Python 3.9からはListやTupleなどのコレクション型の型ヒントが標準実装され直感的に扱いやすくなっている他、Python 3.10からはパターンマッチ文としてmatch（他言語でいうswitch）が登場しています。これは特にデータ分析との相性もよく直感的に分岐を実現できます。

また、幅広いPythonランタイムのサポートにより、移行も容易となっています。企業によってはPython 3.8は利用が制限されているケースもあったのではないかと思います。

[公式ドキュメント: Python UDFsの紹介](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-introduction)
[公式ドキュメント: Pythonでのストアドプロシージャの記述](https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-python)

#### Snowpark ML Modeling API（👀Public Preview）
Scikit-learnの特徴量計算機や、xgboostの機械学習機をネイティブに実装し、Snowflakeの関数として使用できます。これらはSnowflakeで最適に動作するよう実装されており、スケーラビリティを最大限に活用することができます。

特徴量計算機としては、データの2値化や標準化、外れ値の処理、ラベルエンコーダ（機械学習の正解ラベルとして使用）などの機能があります。機械学習機としては、決定木によるカテゴリデータの分類や連続値の予測、Kmeansによる教師なし学習アルゴリズムなど多様な機能を扱うことができます。

[公式ドキュメント: Snowpark ML: Snowflake用機械学習ツールキット](https://docs.snowflake.com/ja/developer-guide/snowpark-ml/index)

#### Snowpark ML Operations API（🔏Private Preview）
実験管理機能や、モデルレジストリ、デプロイ機能を備え、Snowflake上でMLOpsを実現できます。Snowflakeのデータベースを活用して、機械学習モデルの実験パラメータや学習・検証結果、学習済みモデルを管理したり、それらをシームレスに読み込んだりすることができます。一般的なMLflowと有するAPIが似通っているため使用も容易です。


また、Snowpark MLで学習したモデル以外に、Amazon SageMakerや、dataikuなどによる学習モデルやパラメータの管理・使用も可能です。学習済みモデルを永続UDFとして`deploy()`、一時UDFを使用する`predict()`を使用して、学習から予測までを完結させられます。

[公式ブログ: Snowflakeはプログラマビリティを拡大し、AI/MLおよびストリーミングパイプライン開発のサポートを強化](https://www.snowflake.com/blog/https-www-snowflake-com-blog-snowflake-expands-developer-programmability-snowpark-container-services/?lang=ja)


#### Snowflake Cortex ML（👀Public Preview）
Cortex ML関数は、SnowflakeのマネージドML関数として時系列データ（分類系もリリース予定？）の予測や異常検知の学習・推論をSQLだけで行える機能です。

この関数を使用するために必要なものはデータのみで、このデータには、タイムスタンプ列／ターゲット列／外部変数列（ターゲットに影響を与える可能性のあるデータ）を含むことができます。


[公式ドキュメント: Snowflake Cortex ML ベースの関数](https://docs.snowflake.com/ja/guides-overview-ml-powered-functions)

#### Python UDAF（🔏Private Preview）
UDAF（User Defined Aggregate Function）は、SUM関数やAVG関数などのように、1つ以上の行を受け取り、単一行の出力を生成する関数です。これは例えば、標準的なSQL集約関数ではカバーできないような特定の統計計算や分析を実行する場合に、UDAFを使用してカスタムの統計処理を行うことができます。

具体的には、時系列データの集計や予測、機械学習による予測などが考えられますが、いずれにしてもUDFによる計算の幅が大きく広がりました。


#### Python API（🔏Private Preview）
こちらのPython APIについて、当初はTaskやDAGのみの定義APIだと紹介していたのですが、そうではなくSnowflakeのワークロードすべてに対応する統合APIのようです。つまり、こちらのPython APIを使用することで、すべてのSnowflakeリソースの作成や削除、設定変更、起動・停止などをPython APIとして行える機能になります。

PuPr時点(2023/12)ではすべてのワークロードに対応している訳ではありませんが、今後対応していくものと考えられます。PuPr時点では、データベース・スキーマ・テーブル、ウェアハウス、コンテナ、タスク・DAGの操作を行うことができるようです。

[公式ドキュメント：Python API](https://docs.snowflake.com/developer-guide/snowflake-python-api/snowflake-python-overview)
[YouTube: Snowflake Tasks Python API And SnowCLI](https://www.youtube.com/watch?v=mosy2jQKDM0&ab_channel=SnowflakeDevelopers)

#### Snowpark Container Service（🔏Private Preview）
Snowflakeのコンピューティングリソースに、より柔軟性の高い、Snowpark Containerサービスが追加されました。言語・ハードウェア的な柔軟性だけでなく、環境の統一が容易で、NativeAppsで共有することも可能となっています。Snowflake Summitでは、Snowpark Containerサービスにより、Jupyter Labを動作させるデモなども紹介されており、衝撃的でした。


なお、このコンテナは、サービス（一般的なWebアプリホスト）とジョブ（関数の実行）から実行を指定することができます。また、このコンテナ用にウェアハウスとは異なるコンピューティングリソースの展開も発表されており、メモリやCPUの指定ができる他、GPUを使用することもできるようになるようです。これはまさにユースケースが無限に広がりますね。
[Snowpark Container Services:Snowflake で洗練された生成 AI とフルスタック アプリを安全に展開して実行する](https://www.snowflake.com/blog/https-www-snowflake-com-blog-snowpark-container-services-deploy-genai-full-stack-apps/?lang=ja)

#### Local Testing（🔏Private Preview）
SnowparkクライアントAPIでは、Snowflakeと接続してセッション、データフレーム操作を行う必要がありますが、このLocal Testing機能により、このライブ接続を行わずにローカルセッションでテストを行い、その後コードを変更することなくデプロイすることができるようになります。
[YouTube: Git integration And Local Testing For Snowpark](https://www.youtube.com/watch?v=IlhbpMtLR60&ab_channel=SnowflakeDevelopers)
[公式ドキュメント: ローカルテストフレームワーク](https://docs.snowflake.com/en/developer-guide/snowpark/python/testing-locally)

#### Snowflake CLI（🔏Private Preview）
UDFやストアドのような関数、StreamlitやSnowpark Containerのようなアプリ・サービスを、コマンドラインインターフェイス(CLI)で作成、更新、デプロイするための機能です。
[GitHub: Snowflake-Labs/snowcli](https://github.com/Snowflake-Labs/snowcli)
[YouTube: Snowflake Tasks Python API And SnowCLI](https://www.youtube.com/watch?v=mosy2jQKDM0&ab_channel=SnowflakeDevelopers)

#### Git Integration（🔏Private Preview）
SnowflakeからGitリポジトリに接続し、任意のGitコンテンツにアクセスできるようになる機能です。これにより、UDF、ストアド、Streamlit、その他のオブジェクトをGit管理されたリソースから作成・更新できるようになります。
[公式ドキュメント: Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/index)
[YouTube: Git integration And Local Testing For Snowpark](https://www.youtube.com/watch?v=IlhbpMtLR60&ab_channel=SnowflakeDevelopers)


これらのDevOps関連機能は、個人的にもすごく興味のある機能になりますし、みなさんも求めている機能なんじゃないかと思います。UDFやプロシージャはまだ管理・デプロイしやすい（Snowparkにもそれ用のAPIがありますし）のですが、Streamlit in SnowflakeやNative Appsのアプリ機能となると途端に管理が大変になるのはあるあるですよね。個人的には、意外？と**Snowflake CLI**に一番興味があり、定期的にGitHubリポジトリを確認し、お！この機能ついに実装されてる！とか、このバグ修正された！なんて確認していたりします。



=====
・・・やはりこうしてみると、Snowflake Summitにおける発表は、Snowpark for Python周りでこれだけあるので、他の機能も合わせると膨大な量でしたね。後日一般公開されたオンデマンド配信にかじりついて視聴していました。

### 2023年8月
さて、Snowflake Summitの興奮も冷めやらぬ中ですが、まだまだリリースは続いていきます。
#### Python Vectorized UDTF（👀Public Preview）
UDFにおけるVectorized実装を、UDTFについても行える機能です。通常のUDTFと若干実装方法は異なりますが、Pandas DataFrameを使用した実装を行いやすくなっています。もちろん、UDTF呼び出しのオーバーヘッドを削減できるため性能アップが望めます。


[公式ドキュメント: ベクトル化されたPython UDTFs](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-tabular-vectorized)

#### UDF・ストアドにおけるPython 3.9, 3.10対応（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpython-39-310%E5%AF%BE%E5%BF%9Cpublic-preview)
#### Pythonストアドプロシージャ 表形式の戻り値（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3-%E8%A1%A8%E5%BD%A2%E5%BC%8F%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4public-preview)

### 2023年9月
#### Streamlit in Snowflake（👀Public Preview）
SnowflakeのWeb UI上でStreamlitというPythonのデータ分析特化のインタラクティブなWebアプリを作成・共有できる機能です。Streamlitがネイティブに統合されたことで、Snowparkを使用してSnowflakeのデータに直接アクセスできることや、Snowpark DataFrameを可視化ライブラリに入力できることを特徴としています。もちろん、Streamlitの特徴である、簡単にWebアプリ（ボタンやテキスト表示・入力、表・グラフの表示）を構築できることも大きな特徴です。

[公式ドキュメント: Streamlit in Snowflake について](https://docs.snowflake.com/ja/developer-guide/streamlit/about-streamlit)

#### External Network Access（👀Public Preview）
Snowflakeの外部にある特定のパブリックネットワークの場所に、「外部アクセス統合」を通じてUDFやストアドからアクセスできるようになる機能です。合わせて、ネットワークルールという外部接続のアウトバウンド・インバウンド制御機能や、シークレットという外部APIなどへの認証情報をセキュアに保管できる機能を組み合わせて使用します。


[公式ドキュメント: 外部ネットワークアクセスの概要](https://docs.snowflake.com/ja/developer-guide/external-network-access/external-network-access-overview)

ちなみに、この近い時期にPuPrとなったStreamlit in SnowflakeとExternal Network Accessを題材としたアプリに関するブログを執筆しているので、興味があればご一読ください（めっちゃ詳しく解説してます・・・！）。[30days of Streamlit の29日目（Hugging Face API）を、Streamlit in Snowflakeで実装してみた](https://qiita.com/toru_hiyama/items/8bfe97847b256a93342f)


### 2023年10月
#### UDF・ストアドにおけるPython 3.11対応（👀Public Preview）
8月のPython 3.9, 3.10のGAから早２ヶ月、Python 3.11がPuPrとなりました。Python 3.11では起動速度と実行速度が高速化されている他、様々な標準ライブラリの改善、例外処理の機能拡張などの更新がありました。

[公式ドキュメント: Python UDFsの紹介](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-introduction)
[公式ドキュメント: Pythonでのストアドプロシージャの記述](https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-python)

#### UDF・ストアドからのステージファイルアクセス（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9public-preview)
#### イベントテーブル（ログ・トレース）（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%83%AD%E3%82%B0%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9public-preview)
#### Pythonパッケージポリシー（👀Public Preview）
Anaconda Snowflakeチャネルで利用できるPythonパッケージに対して、Snowflakeアカウントごとに許可リストと拒否リストを設定できる機能です。この機能により、より高度なガバナンスとセキュリティを実現することができます。

[公式ドキュメント: パッケージポリシー](https://docs.snowflake.com/ja/developer-guide/udf/python/packages-policy)
#### Python Vectorized UDTF（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python-vectorized-udtfpublic-preview)
### 2023年11月
11月2日にSnowday 2023にて、Snowpark周辺機能としてMLOps関連の進捗や新機能、Snowflake NotebooksのPrPr、LLM機能の発表が行われました！

#### Snowflake Notebooks（🔏Private Preview）
Snowdayにて、こちらのNotebooksが発表されました！Snowsight上のUIで、PythonやSQLをセルごとに実行することができ、その実行結果を文字列や表だけでなく、グラフやStreamlit UIも表示することができます。

これまで、Snowpark for Pythonの実行環境で苦労していた方にとっては、注目のリリースとなりそうです。もちろん、ライブラリの指定やNotebooksの共有なども簡単に行なえます。また、Snowflake謹製のNotebooksのため、コストなども無駄にかからないような仕様になっていました。
[公式ブログ: Snowpark ML、Snowflake Notebooks、Snowflake特徴量ストアを使用してMLを簡単に構築、展開](https://www.snowflake.com/blog/build-deploy-ml-using-snowpark-notebooks-feature-store/?lang=ja)

#### Snowflake Feature Store（🔏Private Preview）
Feature Storeとは、機械学習の領域で一般に、特徴量を保管、処理、そしてアクセスするためのハブとして利用できる機能を指します。SnowflakeのFeature Storeもほぼ同等の機能を有すると思われます。

特に、あるテーブルを機械学習モデルのインプットにする場合、そのモデルが必要とするインプットに整形するのは大変なので、ここをFeature Storeに保管した特徴量抽出パイプラインでシームレスに変換することができれば便利ですね。
[公式ブログ: Snowpark ML、Snowflake Notebooks、Snowflake特徴量ストアを使用してMLを簡単に構築、展開](https://www.snowflake.com/blog/build-deploy-ml-using-snowpark-notebooks-feature-store/?lang=ja)

#### Snowflake Cortex LLM（🔏Private Preview）
Snowdayで発表された機能の中でも特に注目度の高い、LLMに関する機能群です。LLM関数（文章の要約・質問への回答、Text to SQLなど）をマネージドな関数として扱える上、このCortex関数を使用してSnowflake CopilotというText to SQLをSnowflakeのUIとして提供する機能も発表されています。
[公式ブログ: Snowflake Cortexによる迅速、簡単、安全なLLMアプリ開発](https://www.snowflake.com/blog/fast-easy-secure-llm-app-development-snowflake-cortex/?lang=ja)

その他、ユニバーサル検索やDocument AIなど、Snowflake上での開発を自然言語で加速させることができる機能も多く発表されています。


### 2023年12月
#### Streamlit in Snowflake（🎉General Availability（AWSリージョンのアカウントのみ））
なんと昨日（12/1～2頃）、**AWSリージョンアカウントのみSiSがGA**となりました！このようにリアルタイムにリリースされていくので、毎週の[リリースノート](https://docs.snowflake.com/en/release-notes/new-features)から目が離せないんですよね。今のところ機能に大きな変更点はなさそうですが、リリースノートに記載されるかもしれませんし、Azure、GCP上でのGAもまだなので、そのあたりもまだまだ楽しみです。

解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#streamlit-in-snowflakepublic-preview)


#### Snowpark ML Modeling API（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-ml-modeling-apipublic-preview)

#### Snowflake Cortex ML（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371/#snowflake-cortex-mlpublic-preview) 

#### Local Testing（👀Public Preview）
こちらもまたまた突然のPuPrリリースです！
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#local-testingprivate-preview)

#### Snowpark Container Service（👀Public Preview（一部リージョンのみ））
AWSのインド ムンバイ、イギリス ロンドン リージョンにて、Snowpark Container ServiceがPuPrとなりました。なおこのリリースでは、コンテナサービスのうち、サービス機能のみがPuPrとなり、ジョブ機能については依然としてPrPrです。

解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-container-serviceprivate-preview)

#### Python API（👀Public Preview）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python-apiprivate-preview)

### 2024年1月
#### UDF・ストアドにおけるPython 3.11対応（🎉General Availability）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#udf%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpython-311%E5%AF%BE%E5%BF%9Cpublic-preview)

#### Snowpark ML Operations API（👀Public Preview（一部機能のみ））
ML Operations APIのうち、Model Registry機能がPuPrとなりました！
MLOpsを行う上で欠かせない機能なので、SnowflakeでもMLOpsやDevOpsが回せるようになったことをひしひしと感じています。

解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowpark-ml-operations-apiprivate-preview)


### 2024年2月
#### External Network Access（🎉General Availability）
2月上旬のAWS・AzureでのGAだけでなく、GCPでも2月末にGAになりました。こちらと関連して、ネットワークルールも非常に便利な機能ですし、利用範囲も広いです（コンテナなどでも使用できます）。
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#external-network-accesspublic-preview)

#### Pythonパッケージポリシー（🎉General Availability）
External Network Accessと同タイミングにGAになりました。
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#python%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BCpublic-preview)

### 2024年3月
#### Snowflake Cortex LLM（👀Public Preview（一部リージョンのみ））
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-cortexprivate-preview)

#### Snowflake CLI（👀Public Preview）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#snowflake-cliprivate-preview)
[公式ドキュメント: Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli-v2/index)

### 2024年4月
#### Git Integration（👀Public Preview）
解説は[こちら](https://qiita.com/toru_hiyama/items/811c6e5cacc6b4922371#git-integrationprivate-preview)
[リリースノート: Access to Git repositories from Snowflake](https://docs.snowflake.com/en/release-notes/2024/8_13#access-to-git-repositories-from-snowflake-preview)

3月下旬から4月上旬にかけて、続々とDevOps関連の機能であるSnowflake CLIとGitアクセスがPublic Previewとなりました。今後のSnowflakeでのソースコード管理がガラッと変わっていくことが予想できます。

## まとめ
Snowparkの基本機能に関するアップデートやデータアプリケーション機能だけでなく、DevOpsやMLOpsなどの管理・運用系機能や、ML・LLM関数をマネージドで提供するような機能まで、データに関する機能が非常に広い範囲で拡張・改善されていることが改めて分かりました。Snowflakeのデータ・基盤を使って、こんなこともできるようになってきているんだぞ！そのスピード感もすごいんだぞ！！ということがわかってもらえたでしょうか？

結局、2023年どころか2021年まで遡ってSnowpark for Pythonのリリースについてすべて振り返ってしまいました。2022年の頃では想像もできなかったアップデートが多々リリースされていて日々驚くばかりです。2024年はDevOpsやMLOps周りの機能のGAやLLM機能のPuPr、GAを楽しみにしつつも、別の角度からのアップデートにも目が離せませんね。

本記事が、Snowpark for Pythonを活用する際の道標になれば幸いです。いいねや共有、コメント、ご質問等いただければ、とっても喜びます。


## 仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


## ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>


<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>