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

Hive关联两张表时去除重复数据的查询方案咨询

解决Hive表去重问题:保留唯一(col1,col2)组合并保留col3值

嘿,我来帮你搞定这个问题!你的核心需求是基于col1和col2去重,同时保留对应的col3值(不关心具体是哪一个的话,选任意一个就行)。之前用JOIN没解决,是因为JOIN本身不会帮你去重,得先对重复的数据集做分组或窗口处理才行。

方法1:用窗口函数ROW_NUMBER()(推荐,灵活可控)

这个方法能让你精准控制保留哪一行的col3值(比如取最后出现的、最大的,或者随便一个),是处理这类去重场景的常用方案。

代码示例:

SELECT col1, col2, col3
FROM (
    SELECT 
        col1, 
        col2, 
        col3,
        -- 按col1+col2分组,给每组的行编号;ORDER BY可以控制保留哪一个col3
        ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS row_num
    FROM Table2
) deduplicated
WHERE row_num = 1;

细节说明:

  • PARTITION BY col1, col2:把Table2的数据按col1和col2的组合分成不同的组,每组就是你说的重复行
  • ORDER BY col3 DESC:在每组内按col3降序排序,这样最大的col3会排在第一位(对应你例子里1,b组的y);如果想随机取,换成ORDER BY rand()就行
  • 最后筛选row_num = 1的行,就能得到每个(col1,col2)组合唯一的一行,同时保留你想要的col3值

方法2:用GROUP BY + 聚合函数(简单直接)

如果只是随便保留一个col3值,用GROUPBY加聚合函数更简单,比如MAX()、MIN()或者Hive 2.3+支持的ANY_VALUE()。

代码示例:

SELECT 
    col1, 
    col2, 
    MAX(col3) AS col3 -- 换成MIN(col3)或ANY_VALUE(col3)都可以
FROM Table2
GROUP BY col1, col2;

细节说明:

  • GROUP BY col1, col2直接把重复的(col1,col2)组合合并成一行
  • 聚合函数会从每组的col3里选一个值:MAX(col3)取最大的(对应你例子里1,b的y),ANY_VALUE()会随机选一个存在的值

如果你需要关联Table1的话

如果最终要关联Table1,记得先对Table2去重再JOIN,不然重复行还是会带过来:

SELECT t1.col1, t1.col2, t2.col3
FROM Table1 t1
JOIN (
    -- 这里用上面任意一种去重逻辑
    SELECT col1, col2, MAX(col3) AS col3
    FROM Table2
    GROUP BY col1, col2
) t2 ON t1.col1 = t2.col1 AND t1.col2 = t2.col2;

这样就能得到和你预期完全一致的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:18