トップ / 結合・集合演算
inner/left/full/semi/anti など、結合の種類を切り替える。
df1.join(df2, on="id", how="semi") # df1側でdf2に一致する行だけを残す(df2の列は付かない)
df1.join(df2, on="id", how="anti") # df1側でdf2に一致しない行だけを残す
ldf1.join(ldf2, on="id", how="semi")
ldf1.join(ldf2, on="id", how="anti")
Snowpark公式ドキュメントに列挙されているhowの値(inner/left・leftouter/right・rightouter/full・outer・fullouter/semi・leftsemi/anti・leftanti/cross/asof)は、semi・antiを含めてPolarsのhowとほぼ同じ語彙。semi結合は「相手に一致する行だけを残すが、相手側の列は付けない」、anti結合は「相手に一致しない行だけを残す」というSQLではやや馴染みの薄い結合で、両APIとも同じ意味・同じ名前で使える。
onに同じ列名を渡した場合の結果列の扱いがAPI間で違う(how="full"など外部結合で顕在化)。Snowpark公式ドキュメントは「列名の文字列を渡すと、結合キー列は1つにマージされる」と明記している。一方Polarsを実行して確認したところ、how="full"でon="id"を指定しても、結果にはidとid_rightという2つの列が別々に残る(一致しなかった行では片方がnullになる)。Snowpark側のコードを移植して「同じ列名を渡したから1列にまとまるはず」と思っていると、Polars側では列が重複したまま残っていて後続処理でつまずく。
Polars 1.36.1 で実行確認 / Snowpark Python SDK 1.51.1 で静的検証(2026-08-31)