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

Met*_*ata 7 hadoop hive

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

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

Id  Name  Technology
1   Abcd  Hadoop
2   Efgh  Java
3   Ijkl  MainFrames
2   Efgh  Java
Run Code Online (Sandbox Code Playgroud)

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

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

fi1*_*1er 21

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

insert overwrite table dynpart select distinct * from dynpart;
Run Code Online (Sandbox Code Playgroud)

  • 有没有其他方法可以让我们不必删除整个表并删除记录 (3认同)

vik*_*ana 10

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

id  Name    Technology
1   Abcd    Hadoop
2   Efgh    Java       --> Duplicate
3   Ijkl    Mainframe
2   Efgh    Python     --> Duplicate
Run Code Online (Sandbox Code Playgroud)

这里 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;
Run Code Online (Sandbox Code Playgroud)

这将为您提供输出:

id  Name    Technology  row_num
2   Efgh    Python           2
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

输出为:

id  Name    Technology  duplicate_count
2   Efgh    Java             2
2   Efgh    Python           2
Run Code Online (Sandbox Code Playgroud)

  • 如何消除重复值 (2认同)