如何从Hive表中删除重复记录?

时间:2017-04-07 13:59:39

标签: hadoop hive

我正在尝试从Hive表中删除重复记录。

我的Hive表:带有列的'dynpart':Id,Name,Technology

if (str.equals("A") && str.equals("B")) {

  alert("A");
  alert("B");

}else if( str.equals("C")){

 alert("C");

}else...... // other conditions 

我们在select查询中使用了'Distinct'这样的选项,但select查询只是从表中检索数据。任何人都可以告诉如何使用删除查询从Hive表中删除重复的行。

确保不建议在Hive中删除/更新记录的标准。但我想学习如何做到这一点。

3 个答案:

答案 0 :(得分:20)

您可以使用insert overwrite语句来更新数据

insert overwrite table dynpart select distinct * from dynpart;

答案 1 :(得分:3)

您可以将不同的记录插入到其他表

create table temp as select distinct * from dynpart

答案 2 :(得分:0)

以防万一,如果您的表在很少或选定的列上有重复的行。假设您具有如下所示的表结构:

id  Name    Technology
1   Abcd    Hadoop
2   Efgh    Java       --> Duplicate
3   Ijkl    Mainframe
2   Efgh    Python     --> Duplicate

此处的id和Name列具有重复的行。 您可以使用解析函数获取重复行,如下所示:

select * from
(select Id,Name,Technology,
row_Number() over (partition By Id,Name order by id desc) as row_num
from yourtable)tab
where row_num > 1;

这将为您提供输出:

id  Name    Technology  row_num
2   Efgh    Python           2

当您需要获得两个重复的行时:

select * from
(select Id,Name,Technology,
count(*) over (partition By Id,Name order by id desc) as duplicate_count
from yourtable)tab
where duplicate_count> 1;

输出为:

id  Name    Technology  duplicate_count
2   Efgh    Java             2
2   Efgh    Python           2