web-dev-qa-db-fra.com

Comment supprimer des enregistrements en double de la table Hive?

J'essaie d'apprendre à supprimer des enregistrements en double d'une table Hive.

Ma table Hive: 'dynpart' avec des colonnes: Id, Name, Technology

Id  Name  Technology
1   Abcd  Hadoop
2   Efgh  Java
3   Ijkl  MainFrames
2   Efgh  Java

Nous avons des options comme "Distinct" à utiliser dans une requête de sélection, mais une requête de sélection récupère simplement les données de la table. Quelqu'un pourrait-il dire comment utiliser une requête de suppression pour supprimer les lignes en double d'une table Hive?.

Assurez-vous qu'il n'est pas recommandé ou pas la norme pour supprimer/mettre à jour les enregistrements dans Hive. Mais je veux savoir comment faire.

7
Metadata

Vous pouvez utiliser l'instruction d'insertion par écrasement pour mettre à jour les données

insert overwrite table dynpart select distinct * from dynpart;
21
fi11er

Juste au cas où votre table contient des lignes en double sur quelques colonnes ou sur des colonnes sélectionnées. Supposons que vous ayez une structure de tableau comme indiqué ci-dessous:

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

Ici, identifiez les colonnes de nom ayant des lignes en double. Vous pouvez utiliser la fonction analytique pour obtenir la ligne en double comme:

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;

Cela vous donnera une sortie en tant que:

id  Name    Technology  row_num
2   Efgh    Python           2

Lorsque vous devez obtenir les deux lignes en double:

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;

Sortie en tant que:

id  Name    Technology  duplicate_count
2   Efgh    Java             2
2   Efgh    Python           2
4
vikrant rana

vous pouvez insérer des enregistrements distincts dans une autre table

create table temp as select distinct * from dynpart
3
Shalaj Shukla