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.
Vous pouvez utiliser l'instruction d'insertion par écrasement pour mettre à jour les données
insert overwrite table dynpart select distinct * from dynpart;
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
vous pouvez insérer des enregistrements distincts dans une autre table
create table temp as select distinct * from dynpart