トップ / 式評価・文字列・型変換
複数の列を横に比較し、行ごとの最大値・最小値を求める。
greatest(col("q1"), col("q2"), col("q3"))
least(col("q1"), col("q2"), col("q3"))
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)