首页 > 解决方案 > PySpark/SQL 加入非唯一键

问题描述

我有两个需要加入的事务表;但是,这两个表之间没有明确的联系:

对于 t1 我有:

unique_id | date | units

对于 t2 我有:

unique_id | date | store_id | transaction_key

我想要的输出是根据 store_id 获得单位;但是,当我在 t1 上使用 unique_id 和日期进行左连接时,在某些情况下,客户在同一天进行多笔交易,这给了我交易密钥的重复项。

添加了示例数据和输出:

表一和表二:

表一和表二

电流输出:

电流输出

期望的输出:

期望的输出

标签: sqljoinpyspark

解决方案


我认为你想要一个left join, 但row_number()作为匹配条件:

select t1.unique_id, t1.date, t1.units, t2.store_id, t2.transaction_key
from (
    select t1.*, row_number() over(partition by unique_id, date order by units) rn
    from table1 t1
) t1
left join (
    select t2.*, row_number() over(partition by unique_id, date order by transaction_key) rn
    from table2 t2
) t2
    on t2.unique_id = t.unique_id and t2.date = t1.date and t2.rn = t1.rn

推荐阅读