第1章 Snowflake AI Data Cloudの特徴とアーキテクチャ(Features & Architecture, 31%)
🎯 この節の学習目標
Snowpark は、Python・Java・Scala から Snowflake のデータを処理するための開発フレームワークで、中心となるのが DataFrame API です。SQL を文字列で組み立てる代わりに、プログラミング言語のメソッドチェーンでデータ操作を記述できます。
Snowpark の最大のポイントは、書いたコードの処理がSnowflake 側(仮想ウェアハウス)にプッシュダウンされて実行されることです。DataFrame への操作は Snowflake が実行できる形に変換され、データのある場所で処理されます。つまり、データをクライアント側に取り出して処理する必要がない(データ移動が不要)ということです。
💡 具体例:Snowpark(Python)のDataFrame操作
# Snowpark Python の例:処理は Snowflake 側で実行される
df = session.table("sales")
result = (
df.filter(df["amount"] > 1000)
.group_by("region")
.agg({"amount": "sum"})
)
result.show() # この時点で Snowflake 上でクエリが実行される
filter や group_by の各操作はすぐには実行されず、結果が必要になった時点でまとめて Snowflake 上のクエリとして実行されます。大量データをネットワーク越しにクライアントへ転送せずに済むのが利点です。
Snowpark では、後述の UDF やストアドプロシージャを Python などで記述することもでき、データエンジニアリングから機械学習の前処理まで、SQL 以外の言語スキルを Snowflake 上でそのまま活かせます。
📝 試験のポイント
Snowpark のキーワードは「Python / Java / Scala の DataFrame API」と「処理は Snowflake 側にプッシュダウンされ、データ移動が不要」の2つです。「データをローカルにダウンロードして処理するライブラリ」という趣旨の選択肢は誤りと判断しましょう。
Snowflake の処理をコードで拡張する仕組みとして、UDF(ユーザー定義関数)とストアドプロシージャがあります。詳細は 4-7 で学ぶため、ここでは役割の違いを整理します。
| UDF(ユーザー定義関数) | ストアドプロシージャ | |
|---|---|---|
| 役割 | 入力値から値を計算して返す(クエリの中で使う部品) | 一連の手続き処理(DDL/DML の実行、条件分岐、ループなど)を実行する |
| 呼び出し方 | SELECT 文などの式の中で呼び出す | CALL 文で実行する |
| 種類 | スカラー UDF(1値を返す)/テーブル関数(UDTF)(行の集合を返す) | — |
| 記述言語 | SQL / Python / Java / JavaScript など | SQL(Snowflake Scripting)/ Python / Java / JavaScript など |
| 実行権限 | — | owner's rights(所有者の権限)または caller's rights(呼び出し元の権限)を選べる |
ざっくり言えば、「計算して値を返す」なら UDF、「処理の流れを実行する」ならストアドプロシージャです。ストアドプロシージャは owner's rights / caller's rights という実行権限の考え方を持つ点も、UDF との違いとして覚えておきましょう。
| 機能 | 内容 |
|---|---|
| Streamlit in Snowflake | Python で対話的なデータアプリ(ダッシュボード・社内ツールなど)を作り、Snowflake の中にそのままホストできる。別途の Web サーバーやホスティング環境は不要 |
| Snowflake Notebooks | Snowsight 内のノートブック環境。SQL と Python をセルごとに混在させて、探索的な分析や開発を進められる |
どちらも「開発したものを動かす場所が Snowflake の中にある」点が共通しています。アプリやノートブックがデータと同じガバナンスの下に置かれるため、データの持ち出しや別インフラの管理が不要になります。
Native App Framework は、Snowflake 上で動く機能一式(ストアドプロシージャ、UDF、Streamlit アプリなど)を1つの「アプリ」としてパッケージ化し、他の Snowflake アカウントに配布するための仕組みです。
図:開発言語・用途とアプリケーション開発機能の対応
📝 試験のポイント
「Python でデータアプリを作って Snowflake 内にホストする」→ Streamlit in Snowflake、「Snowsight 内で SQL と Python のノートブック」→ Snowflake Notebooks、「機能をアプリとしてパッケージ化し配布」→ Native App Framework、という機能名と用途のマッチングで答えられるようにしておきましょう。
✅ この節のまとめ
問1. Snowpark の説明として正しいものはどれか。
正解:B
Snowpark は Python / Java / Scala 向けの DataFrame API で、操作は Snowflake 側で実行できる形に変換され、仮想ウェアハウス上で処理されます。Aは誤りで、データ移動が不要な点こそ Snowpark の利点です。Cは誤りで、Snowpark はまさにプログラミング言語から使うための機能です。Dは誤りで、外部クラスタは不要で Snowflake のコンピュートで実行されます。
問2. UDF とストアドプロシージャの違いに関する説明として正しいものはどれか。
正解:B
UDF は「値を返す部品」としてクエリの式の中で使い、ストアドプロシージャは手続き処理を CALL で実行します。Aは呼び出し方の説明が逆です。Cは誤りで、ストアドプロシージャは Python や Java などでも記述できます。Dは誤りで、owner's rights / caller's rights の実行権限を選ぶのはストアドプロシージャの特徴です。
問3. 「Python で作った対話的なダッシュボードアプリを、別のインフラを用意せず Snowflake の中でホストして社内に公開したい」という要件に最も適した機能はどれか。
正解:B
Streamlit in Snowflake を使うと、Python で書いたデータアプリを Snowflake 内にそのままホストでき、別途の Web サーバーやホスティング環境は不要です。Aはテーブルタイプの一種、Cは継続的なデータロードの機能、Dはクラスタリング状態を確認するシステム関数であり、いずれもアプリのホスティングとは無関係です。
問4. Snowflake のアプリケーション開発機能に関する説明として正しいものを2つ選べ。
正解:A・B
Snowflake Notebooks は Snowsight に組み込まれたノートブック環境で、SQL と Python をセルごとに使い分けられます(A)。Native App Framework はアプリをパッケージ化してリスティング経由で配布する仕組みです(B)。Cは誤りで、別途のサーバー構築は不要です。Dは誤りで、アプリを利用者側のアカウントにインストールし、データのある場所で実行する(データを渡すのではなくロジックが届く)のが Native Apps の発想です。