トップ / ウィンドウ関数

first_value / last_value

パーティション内で並べ替えた順序の、先頭の値・末尾の値を各行に持たせる。

SNOWPARK 静的検証のみ

first_value(col("salary")).over(window_spec)
last_value(col("salary")).over(window_spec)

POLARS 実行確認済み

pl.col("salary").first().over("department")
pl.col("salary").last().over("department")

挙動・設計の違い

SnowparkはSQLのFIRST_VALUE/LAST_VALUEウィンドウ関数に変換される。Polarsは通常の集約メソッドfirst()/last().over()と組み合わせることで、同じ「グループ内の先頭・末尾の値を全行に展開する」処理になる。実行して確認したところ、departmentでグループ化したsalary列で、両APIとも各グループの先頭行・末尾行の値が全行に複製される。

移行時の落とし穴

「先頭・末尾」が何を基準にした順序かは、事前の並べ替えに完全に依存する。SnowparkはWindow仕様のorder_byが順序を決めるが、Polars側は.over()を呼ぶ前にldf.sort(...)で明示的に並べ替えておく必要がある(lag/leadのページと同じ注意点)。並べ替えを忘れると、Snowflake側では意図した順序でFIRST_VALUEが決まるのに、Polars側は元のデータの物理的な並び順のままの「先頭」を返してしまう。

ウィンドウ関数の他のメソッド

出典・検証情報

Polars 1.36.1 で実行確認 / Snowpark Python SDK 1.51.1 で静的検証(2026-08-30)