Snowpark Python入門|DataFrameの作り方と操作をやさしく解説

Snowpark Python入門|DataFrameの作り方と操作をやさしく解説 Snowflake

はじめに:なぜSnowpark PythonのDataFrameを学ぶの?

「SQLは書けるけど、もっと柔軟にPythonで処理したい!」そんな声にこたえてくれるのが Snowpark Python です。Snowparkを使うと、SnowflakeのデータをPythonコードのまま操作でき、しかも処理は裏側のSnowflakeウェアハウスで実行されます。つまり、ローカルにデータをダウンロードせずに大規模データを扱えるんです。

Snowparkの主役は DataFrame(データフレーム)。表形式のデータを表すオブジェクトで、PySparkやpandasを触ったことがある人ならすぐに馴染めます。今回は「DataFrameの作り方」と「基本操作」を、SQLと比べながらやさしく見ていきましょう。Snowpark全体の概要については Snowpark入門|PythonでSnowflakeのデータ処理を書こう も合わせてどうぞ。

Snowpark Python入門|DataFrameの作り方と操作をやさしく解説

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を覗けるので、最初は確認しながら書くと安心です。

代表的な操作:filter / select / group_byの解説図

結果の保存と書き出し

処理結果はそのまま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との対応を意識しながら、まずは小さなテーブルで試してみてください!

参考リンク

関連記事