在 HiveSql 中加入两个数据集时如何处理重复项

问题描述

user_information 表具有唯一的 user_id。但是应用程序表包含每个用户的多条记录。我想获取他们的年龄、性别、收入值并合并到 user_information 表中。

下面的查询是我通常使用的 postgresql 查询。但我想在 Hivesql 中执行此任务。你能帮我解决这个问题吗。

SELECT
    a.user_id,app.*
FROM 
    user_information u
    LEFT JOIN (
        SELECT distinct on (user_id)
            age,gender,income
        FROM 
            applications b
        Where
            user_id = u.user_id
    ) app ON TRUE

解决方法

使用 distinct on 代替 row_number()

SELECT a.user_id,a.*
FROM user_information u LEFT JOIN
     (SELECT (user_id) a.*,ROW_NUMBER() OVER (PARTITION BY a.user_id ORDER BY <something> as seqnum
      FROM applications a
    ) a 
    ON a.user_id = u.user_id AND seqnum = 1;

在 Postgres 中,您应该在使用 ORDER BY 时使用 DISTINCT ON。但是,您的查询没有 ORDER BY,因此缺少关键信息。

您应该在 ORDER BY 中包含一些内容来确定您想要的行。如果您不在乎,则需要 order by 子句。您可能可以使用常量 (ORDER BY NULL) 或使用 user_id