我正在尝试从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)
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)