はじめに:なぜSnowpark PythonのDataFrameを学ぶの?
「SQLは書けるけど、もっと柔軟にPythonで処理したい!」そんな声にこたえてくれるのが Snowpark Python です。Snowparkを使うと、SnowflakeのデータをPythonコードのまま操作でき、しかも処理は裏側のSnowflakeウェアハウスで実行されます。つまり、ローカルにデータをダウンロードせずに大規模データを扱えるんです。
Snowparkの主役は DataFrame(データフレーム)。表形式のデータを表すオブジェクトで、PySparkやpandasを触ったことがある人ならすぐに馴染めます。今回は「DataFrameの作り方」と「基本操作」を、SQLと比べながらやさしく見ていきましょう。Snowpark全体の概要については Snowpark入門|PythonでSnowflakeのデータ処理を書こう も合わせてどうぞ。

Snowpark DataFrameの基本概念
DataFrameは「行と列を持つ仮想的な表」のようなもの。重要なのは、操作を書いた瞬間にはまだ実行されない 遅延評価(Lazy Evaluation) という仕組みを採用している点です。filter() や select() を呼んでも、実際にSnowflake側で動くのは show() や collect() など”アクション”が呼ばれたときだけ。これにより無駄な処理を省き、最終的なSQLにまとめて変換してくれます。
セッションを作ってDataFrameを生成する
まずはSnowflakeに接続する Session を作ります。これがすべての出発点です。
from snowflake.snowpark import Session
connection_params = {
"account": "xxxxx-yyyyy",
"user": "MY_USER",
"password": "********",
"role": "SYSADMIN",
"warehouse": "COMPUTE_WH",
"database": "DEMO_DB",
"schema": "PUBLIC",
}
session = Session.builder.configs(connection_params).create()
DataFrameの作り方は主に3つあります。
# ① 既存テーブルから
df = session.table("SALES")
# ② SQLクエリから
df = session.sql("SELECT * FROM SALES WHERE AMOUNT > 1000")
# ③ Pythonのデータから
df = session.create_dataframe(
[[1, "りんご"], [2, "みかん"]],
schema=["id", "name"]
)
代表的な操作:filter / select / group_by
DataFrameはメソッドをつなげて(チェーンして)書けるのが気持ちいいところ。SQLの「WHERE」「SELECT」「GROUP BY」がそれぞれメソッドに対応します。
from snowflake.snowpark.functions import col, sum as sum_
result = (
session.table("SALES")
.filter(col("AMOUNT") > 1000) # WHERE
.select(col("REGION"), col("AMOUNT")) # SELECT
.group_by("REGION") # GROUP BY
.agg(sum_("AMOUNT").alias("TOTAL")) # 集計
)
result.show() # アクション:結果を表示
rows = result.collect() # アクション:Pythonのリストとして取得
このコードを実行すると、Snowparkは内部で1本のSQLにまとめてSnowflakeへ送信します。result.explain() で実際に生成されるSQLを覗けるので、最初は確認しながら書くと安心です。

結果の保存と書き出し
処理結果はそのままSnowflakeのテーブルに保存できます。ETLの一部として使うときに便利です。
# 新しいテーブルとして保存(上書き)
result.write.mode("overwrite").save_as_table("SALES_SUMMARY")
# pandas DataFrameに変換(ローカルで分析したいとき)
pdf = result.to_pandas()
よくあるユースケースと注意点
- ETL/ELT処理:複雑な前処理をPythonで書き、結果をテーブルに書き戻す。ストアドプロシージャのPython版としても使えます。
- 機械学習の前処理:特徴量エンジニアリングをSnowflake側で完結させ、最後にpandasへ。
- UDFと組み合わせ:複雑なロジックは Python UDF として登録するとより柔軟です。
注意したいのは collect() や to_pandas() を大きなデータに対してうっかり実行しないこと。これらはすべての行をクライアントに引っ張ってくるため、メモリ不足の原因になります。検証時は limit() を挟む癖をつけましょう。
まとめ
Snowpark PythonのDataFrameは、PythonらしさとSnowflakeのスケーラビリティを両立できる強力なAPIです。session.table() で読み込み、filter / select / group_by でデータを加工し、save_as_table で書き戻す——この流れを覚えれば、もう立派なSnowpark使いです。SQLとの対応を意識しながら、まずは小さなテーブルで試してみてください!
参考リンク
関連記事
- Snowpark入門|PythonでSnowflakeのデータ処理を書こう – Snowpark全体の概要をつかみたい方はまずこちら。
- Snowflake UDF入門|SQL・JavaScript・Pythonで関数を自作する方法 – DataFrameと組み合わせると便利なPython UDFの作り方。
- Snowflakeストアドプロシージャ入門|SQLとJavaScript版の使い方 – SnowparkはPython版ストアドプロシージャとしても活用できます。

