我正在分析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;
但是,我还没有找到一种方法,既可以识别出具有distinct count>1的值,又可以打印出那些不同的值(因为识别count>1需要聚合,但是打印这些不同的值需要取消聚合)。是否可以在单个查询中执行?
2条答案
按热度按时间bnlyeluc1#
我倾向于使用窗口功能:
mm5n2pyu2#
你可以用
union all
: