如何在 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 = 800 行是重复的。但是这个查询并没有告诉哪些行是重复的。

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

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

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

所以我想知道:

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

原文由 Shekhar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

Hive 不验证 主键和外键约束。

由于这些约束未经验证,上游系统需要在将数据加载到 Hive 之前确保数据完整性。

这意味着 Hive 允许在主键中重复。

要解决您的问题,您应该执行以下操作:

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

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

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设您想在此处获取基于特定列 ID 的重复行。下面的查询将为您提供所有在 hive 表中重复的 ID。

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

原文由 Maneesh K Bishnoi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进