トップ / ウィンドウ関数

row_number

パーティション内で1から始まる連番をふる。同率でも必ず別の番号になる。

SNOWPARK 静的検証のみ

row_number().over(window_spec)

POLARS 実行確認済み

# 先にソートしてから使う
ldf.sort(["department", "salary"]).with_columns(pl.col("salary").cum_count().over("department").alias("rn"))

挙動・設計の違い

SnowparkはSQLのROW_NUMBER()に変換される。Polarsには専用の連番関数が無く、.cum_count()(累積個数)をパーティションごとに数える形で代用する。実行して確認したところ、同率の値(rankでは同じ順位になった行)でも、cum_countでは別々の連番になる。

移行時の落とし穴

Polarsのcum_count()は、あらかじめデータが正しい順序に並んでいることが前提(累積で数えるだけなので、並べ替えの機能自体は持たない)。パーティション内でどの順に番号をふりたいかに応じて、.over()を付ける前にsort()しておく必要がある。ソートを忘れると、意図した順序と違う連番になる。

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

出典・検証情報

Polars 1.43.2 で実行確認 / Snowpark Python SDK 1.54.0 で静的検証(2026-08-24)