【发布时间】:2018-07-27 16:10:38
【问题描述】:
我正在分析 hadoop 中的数据。有一些重复的条目,其中 A、B 列重复,C 列不同。我要做的是只识别 A、B 重复项,然后为每个重复项打印出 C 列的不同值。
样本数据:
row, data, input_date, INPUT__FILE__NAME
0, data1, 20180702, LOCATION1
1, data1, 20180702, LOCATION2
2, data1, 20180702, LOCATION2
3, data2, 20180702, LOCATION1
4, data2, 20180702, LOCATION1
5, data2, 20180702, LOCATION2
6, data2, 20180702, LOCATION3
7, data2, 20180702, LOCATION3
8, data3, 20180702, LOCATION2
9, data4, 20180702, LOCATION3
(请注意,INPUT__FILE__NAME 是 Hadoop 中数据来源文件位置的元数据值。如果相关的话。但据我所知,就 SQL 查询而言,它可以像另一列一样处理)。
在此示例中,我将使用 data 和 input_date 来识别重复项。我希望能够看到他们每个人的独特INPUT__FILE__NAME。
所需的输出(如果不同的输出有意义,可以更改输出的结构——我只需要不同的INPUT_FILE_NAME 值):
data, input_date, INPUT__FILE__NAME
data1, 20180702, LOCATION1
data1, 20180702, LOCATION2
data2, 20180702, LOCATION1
data2, 20180702, LOCATION2
data2, 20180702, LOCATION3
(所以在输出中,我不需要看到data3 或data4,因为它们没有重复。)
我发现要识别重复项,我可以执行以下操作:
SELECT data, input_date, count(DISTINCT INPUT__FILE__NAME)
FROM table
GROUP BY data, input_date
HAVING count(DISTINCT INPUT__FILE__NAME)>1;
但是我还没有找到一种方法来识别具有不同计数 > 1 的值,然后打印出那些不同的值(因为识别计数 >1 需要聚合,但是打印不同的值需要 un-聚合)。是否可以在单个查询中完成?
【问题讨论】: