You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SAS Merge代码转换为PySpark SQL等价写法的技术咨询

SAS转PySpark SQL分析与实现

问题解答

1. 条件对应的SQL连接逻辑

  • if in1 and in2:完全对应内连接(INNER JOIN),只保留input_1和input_2中能通过col_1/col_2匹配上的行,输出到data3。
  • else if in1:其实不是左连接(LEFT JOIN),而是左连接后的筛选结果——它只取input_1里**没匹配到input_2**的行,输出到data2。左连接会包含input_1的所有行(包括匹配到input_2的),但这里只保留左表独有的部分。

2. Merge语句中表的顺序问题

  • input_2和input_1的顺序不影响in=in1/in=in2的标记逻辑,因为in=是直接绑定到指定表的,和merge时的位置无关。不管谁在前,in1永远标记来自input_1的行,in2永远标记来自input_2的行。
  • input_2不等价于左连接的左表:你这里else if in1对应的逻辑,是把input_1作为左表,左连接input_2后筛选掉右表有匹配的行,左表是input_1而非input_2。

对应的PySpark SQL代码

创建data3(内连接结果)

CREATE TABLE data3 AS
SELECT
    i1.*,
    i2.*,
    'yes' AS new_col
FROM input_1 i1
INNER JOIN input_2 i2
ON i1.col_1 = i2.col_1 AND i1.col_2 = i2.col_2;

创建data2(input_1独有的行)

常规写法:

CREATE TABLE data2 AS
SELECT i1.*
FROM input_1 i1
LEFT JOIN input_2 i2
ON i1.col_1 = i2.col_1 AND i1.col_2 = i2.col_2
WHERE i2.col_1 IS NULL;

更高效的反连接写法:

CREATE TABLE data2 AS
SELECT * FROM input_1
ANTI JOIN input_2
ON input_1.col_1 = input_2.col_1 AND input_1.col_2 = input_2.col_2;

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:42:40