Hive SQL:如何识别组之间的重复项

问题描述

我希望根据项目在跨组ID中查找重复项,例如:

希望根据ID组中Item的重复项来导出Dup变量。换句话说,如果在另一个ID中找到相同的项,则Dup为“是”。如果项目仅在同一ID中重复,则Dup为“ no”。

表1:

+----+--------+-----+
| ID |  Item  | Dup |
+----+--------+-----+
| a  | apple  | yes |
| a  | apple  | yes |
| b  | apple  | yes |
| c  | orange | no  |
| c  | orange | no  |
| d  | pear   | yes |
| f  | pear   | yes |
| e  | mango  | no  |
+----+--------+-----+

我不确定是否首先通过按ID和Item对数据集进行重复数据删除来简化操作。

用于汇总的最终数据集(重复数据删除):

表2

+----+--------+-----+
| ID |  Item  | Dup |
+----+--------+-----+
| a  | apple  | yes |
| b  | apple  | yes |
| c  | orange | no  |
| d  | pear   | yes |
| f  | pear   | yes |
| e  | mango  | no  |
+----+--------+-----+

我应该如何构造一个配置单元查询以检测重复项? 任何帮助将不胜感激!

解决方法

嗯。 。 。如果我理解正确,则可以使用聚合和窗口函数:

select id,item,(case when count(*) over (partition by item) > 1 then 'yes' else 'no' end) as dups
from t
group by id,item;