我想从一个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;
上面的查询应该列出重复的行以及特定行重复的次数。但是此查询显示零行,这意味着该表中没有重复的行。
所以我想知道:
答案 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