如何在Hive中查找重复的行?

She*_*har 5 sql hive

我想从Hive表之一中找到重复的行,为此给了我两种方法。

第一种方法是使用以下两个查询:

select count(*) from mytable; // this will give total row count 
Run Code Online (Sandbox Code Playgroud)

第二个查询如下所示,它将给出不同行的计数

select count(distinct primary_key1, primary_key2) from mytable;
Run Code Online (Sandbox Code Playgroud)

使用这种方法,对于我的一个表,使用第一个查询得出的总行数是3500,第二个查询给出的行数是2700。因此,它告诉我们3500 - 2700 = 700行是重复的。但是此查询不会告诉您哪些行是重复的。

查找重复项的第二种方法是:

select primary_key1, primary_key2, count(*)
from mytable
group by primary_key1, primary_key2
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

上面的查询应列出重复的行以及特定行被重复多少次的列表。但是此查询显示的行为零,这意味着该表中没有重复的行。

所以我想知道:

  1. 如果我的第一种方法是正确的-如果是的话,如何找到重复的行
  2. 为什么第二种方法不提供重复的行列表?
  3. 还有其他方法可以找到重复项吗?

小智 8

由于PI中允许使用null和重复项,因此您应该执行以下操作:

select [every column], count(*)
from mytable
group by [every column]
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

这样,您将获得重复行的列表。