トップ / 式評価・文字列・型変換

greatest / least

複数の列を横に比較し、行ごとの最大値・最小値を求める。

SNOWPARK 静的検証のみ

greatest(col("q1"), col("q2"), col("q3"))
least(col("q1"), col("q2"), col("q3"))

POLARS 実行確認済み

pl.max_horizontal("q1", "q2", "q3")
pl.min_horizontal("q1", "q2", "q3")

挙動・設計の違い

Snowparkのgreatest/leastはSQLの同名関数に変換される複数列の可変長引数関数。Polarsには同名の関数が無く、pl.max_horizontal/pl.min_horizontalという「横方向(行ごと)の集約」専用の関数を使う(max/minは列方向の集約に使われるため名前が分かれている)。

移行時の落とし穴

NULLの扱いが正反対。Snowflake公式ドキュメントは「GREATESTは引数のいずれかがNULLならNULLを返す」と明記している(NULLを無視したい場合は別関数GREATEST_IGNORE_NULLSを使う)。一方、実行して確認したところPolarsのmax_horizontal/min_horizontal既定でNULLを無視し、NULLでない値の中から最大・最小を返す[1, None, 3][5, 2, None]の行ごとmax_horizontal[5, 2, 3]になり、2行目・3行目もNULLにならない)。移植すると欠損データの扱いが逆転するので要注意。

式評価・文字列・型変換の他のメソッド

出典・検証情報

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