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

时间:2017-10-14 18:51:55

标签: sql hive

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

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

select count(*) from mytable; // this will give total row count 

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

select count(distinct primary_key1, primary_key2) from mytable;

使用这种方法,对于我的一个表,使用第一个查询派生的总行数为3500,第二个查询给出行计数2700.因此它告诉我们3500 - 2700 = 700行是重复的。但是这个查询并不能说明哪些行是重复的。

我找到重复的第二种方法是:

select primary_key1, primary_key2, count(*)
from mytable
group by primary_key1, primary_key2
having count(*) > 1;

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

所以我想知道:

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

3 个答案:

答案 0 :(得分:5)

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

select [every column], count(*)
from mytable
group by [every column]
having count(*) > 1;

通过这种方式,您将获得重复行的列表。

答案 1 :(得分:1)

分析窗口函数row_number()非常有用,可以根据partition by子句中指定的元素提供重复项。然后,简单的内联视图和exists子句将查明相应的记录集包含原始表中的这些重复项。在某些数据库中(如TD,您可以使用QUALIFY pragma选项放弃内联视图)

SQL1& SQL2可以组合使用。 SQL2:如果你想处理NULL而不是简单地解除,那么在

中合并和连接可能会更好
# app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
  storage :fog
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

3)查找所有记录,而不仅仅是&gt; 1条记录。这提供了所有上下文数据以及键,因此在分析为什么有重复而不仅仅是键时它非常有用。

SELECT count(1) , count(distinct coalesce(keypart1 ,'') + coalesce(keypart2 ,'') )  
  FROM srcTable s

答案 2 :(得分:0)

假设您要根据此处的特定列ID获得重复的行。下面的查询将为您提供所有配置单元中表中重复的ID。

SELECT "ID"
FROM TABLE
GROUP BY "ID"
HAVING count(ID) > 1