トップ / 結合・集合演算

join の how(結合の種類)

inner/left/full/semi/anti など、結合の種類を切り替える。

SNOWPARK 静的検証のみ

df1.join(df2, on="id", how="semi")   # df1側でdf2に一致する行だけを残す(df2の列は付かない)
df1.join(df2, on="id", how="anti")  # df1側でdf2に一致しない行だけを残す

POLARS 実行確認済み

ldf1.join(ldf2, on="id", how="semi")
ldf1.join(ldf2, on="id", how="anti")

挙動・設計の違い

Snowpark公式ドキュメントに列挙されているhowの値(inner/leftleftouter/rightrightouter/fullouterfullouter/semileftsemi/antileftanti/cross/asof)は、semiantiを含めてPolarsのhowとほぼ同じ語彙semi結合は「相手に一致する行だけを残すが、相手側の列は付けない」、anti結合は「相手に一致しない行だけを残す」というSQLではやや馴染みの薄い結合で、両APIとも同じ意味・同じ名前で使える。

移行時の落とし穴

onに同じ列名を渡した場合の結果列の扱いがAPI間で違うhow="full"など外部結合で顕在化)。Snowpark公式ドキュメントは「列名の文字列を渡すと、結合キー列は1つにマージされる」と明記している。一方Polarsを実行して確認したところ、how="full"on="id"を指定しても、結果にはidid_rightという2つの列が別々に残る(一致しなかった行では片方がnullになる)。Snowpark側のコードを移植して「同じ列名を渡したから1列にまとまるはず」と思っていると、Polars側では列が重複したまま残っていて後続処理でつまずく。

結合・集合演算の他のメソッド

出典・検証情報

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