web-dev-qa-db-fra.com

ruche - comment supprimer une table de ruche externe avec des données

J'utilise 

drop table <table_name>

Si je recrée la table avec le même schéma et le même nom, je récupère les anciennes données. Devrais-je supprimer le répertoire de la table du système de fichiers hdfs pour supprimer complètement les données?

10
amrk7

Vous devez changer le tableau externe en interne avant de le déposer:

Exemple

beeline> ALTER TABLE $tablename SET TBLPROPERTIES('EXTERNAL'='False'); // make the table as internal

et alors:

beeline> drop table $tablename; //if you drop the table data will be dropped as well.
2
HISI

Bien que je sois d’accord avec pensz, une légère modification, vous n’avez pas besoin de laisser tomber la table. Il suffit de remplacer le fichier hdfs externe par le nouveau fichier souhaité (la structure du fichier remplacé doit être identique) et lorsque vous effectuez une sélection * du tableau précédent, vous remarquerez qu’il contiendra les nouvelles données et non les anciennes. un.

Les tables externes ne représentent en gros que le schéma des données et l'emplacement du fichier. Vous pouvez ajouter plusieurs fichiers au même emplacement et votre table contiendra automatiquement toutes les données liées à ces fichiers. De même, vous pouvez remplacer toutes les données et votre tableau en tiendra automatiquement compte.

2
Nicole Hu

Pas besoin de supprimer le répertoire dans hdfs sauf que vous avez besoin de plus d'espace hdfs.

Si vous voulez remplacer de nouvelles données, il vous suffit de remplacer le fichier dans hdfs.

Si vous voulez utiliser le nom de la table pour une autre utilisation, alors supprimez-la et supprimez le répertoire dans hdfs.

En fait, je pense que c’est une fonctionnalité très pratique qui vous permet de modifier le schéma de votre table (par exemple, vous voulez changer le nom du champ ou concatter deux champs dans un seul champ) sans perdre aucune donnée.

1
pensz

Vous pouvez consulter ce lien, cela pourrait aider

https://issues.Apache.org/jira/browse/Hive-4367

1
shashaDenovo

Commencez par obtenir le chemin de la table en utilisant la commande suivante: 

Hive> décris le nom de la base de données formaté. Le nom de la table;

Copiez ensuite l'emplacement complet qui apparaît dans la description, par exemple: /User/Hive/warehouse/nom_bdd.db/nom_table

Après cette utilisation, utilisez la commande suivante pour tronquer toutes les données de la table donnée:

***Hive> dfs -rmr /user/Hive/warehouse/database_name.db/table_name;*** 

OR

***Hive> dfs -rm -r /user/Hive/warehouse/database_name.db/table_name;***

Ensuite, vous pouvez l’effacer complètement à l’aide de la commande DROP TABLE.

1
Sachin Devhade

En effet, supprimer TABLES EXTERNES ne supprimera pas les données.

Vous pouvez utiliser TRUNCATE TABLE pour vous débarrasser des données.

Doc ici: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TruncateTable

Puis utilisez DROP TABLE pour supprimer le schéma si nécessaire

0
JohnConnor

s'il s'agit d'une table externe, le fait de la supprimer signifie que vous supprimez simplement le schéma 

vous devez donc supprimer manuellement le fichier de HDFS 

ou créer une nouvelle table et donner un emplacement de fichier différent dans les propriétés de tbl

0
Viswanath