Quelqu'un peut-il me dire quelle est la différence entre la table externe de Hive et les tables internes. Je sais que la différence se fait lors de la suppression de la table. Je ne comprends pas ce que vous voulez dire par les données et les métadonnées sont supprimées dans les tables internes et seulement les métadonnées sont supprimées dans les tables externes. Quelqu'un peut-il m'expliquer en termes de nœuds s'il vous plaît.
Réponses
Trop de publicités?Hive possède une base de données relationnelle sur le nœud maître qu'il utilise pour garder la trace de l'état. Par exemple, lorsque vous CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';
Ce schéma de table est stocké dans la base de données.
Si vous avez une table partitionnée, les partitions sont stockées dans la base de données (ce qui permet à Hive d'utiliser des listes de partitions sans avoir à aller les chercher dans le système de fichiers, etc). Ce genre de choses sont les "métadonnées".
Lorsque vous supprimez une table interne, les données sont supprimées, ainsi que les métadonnées.
Lorsque vous supprimez une table externe, elle ne supprime que les méta-données. Cela signifie que le répertoire de stockage ignore désormais ces données. Il ne touche pas les données elles-mêmes.
Les tables de ruches peuvent être créées comme EXTERNES ou INTERNES. Il s'agit d'un choix qui affecte la façon dont les données sont chargées, contrôlées et gérées.
Utilisez des tables EXTERNES lorsque :
- Les données sont également utilisées en dehors de Hive. Par exemple, les fichiers de données sont lus et traités par un programme existant qui ne verrouille pas les fichiers.
- Les données doivent rester dans l'emplacement sous-jacent même après un DROP TABLE. Cela peut s'appliquer si vous pointez plusieurs schémas (tables ou vues) sur un seul ensemble de données ou si vous itérez entre plusieurs schémas possibles.
- Vous voulez utiliser un emplacement personnalisé tel que ASV.
- Hive ne devrait pas posséder les données et contrôler les paramètres, les répertoires, etc., vous avez un autre programme ou processus qui fera ces choses.
- Vous ne créez pas une table basée sur une table existante (AS SELECT).
Utilisez les tableaux INTERNES lorsque :
Les données sont temporaires.
Vous voulez que Hive gère complètement le cycle de vie de la table et des données.
Pour répondre à votre question :
Pour les tables externes, Hive stocke les données dans la LOCATION spécifiée lors de la création de la table (généralement pas dans le répertoire de l'entrepôt). Si la table externe est supprimée, les métadonnées de la table sont supprimées mais pas les données.
Pour les tables internes, Hive stocke les données dans son répertoire d'entrepôt. Si la table est supprimée, les métadonnées de la table et les données seront supprimées.
Pour votre référence,
Différence entre les tableaux internes et externes :
Pour les tableaux externes -
La table externe stocke les fichiers sur le serveur HDFS mais les tables ne sont pas liées complètement au fichier source.
Si vous supprimez une table externe, le fichier reste sur le serveur HDFS.
Par exemple, si vous créez un table externe appelé "table_test" dans HIVE en utilisant HIVE-QL et en liant la table au fichier "fichier" , alors la suppression de "table_test" de HIVE ne supprimera pas "file" de HDFS .
Les fichiers de tables externes sont accessibles à toute personne ayant accès à la structure de fichiers HDFS. et au niveau des dossiers.
Les métadonnées sont conservées sur le nœud principal, et la suppression d'une table externe de HIVE ne supprime que les métadonnées et non les données/fichiers.
Pour les tableaux internes-
- Stocké dans un répertoire basé sur les paramètres dans
hive.metastore.warehouse.dir
, par défaut, les tables internes sont stockées dans le répertoire suivant "/user/hive/entrepôt" vous pouvez le changer en mettant à jour l'emplacement dans le fichier de configuration .- La suppression de la table supprime les métadonnées et les données du nœud maître et du HDFS respectivement.
- La sécurité des fichiers de la table interne est contrôlée uniquement par HIVE. La sécurité doit être gérée au sein de HIVE, probablement au niveau du schéma (dépend de l'organisation). de l'organisation).
Hive peut avoir des tables internes ou externes, c'est un choix qui affecte la façon dont les données sont chargées, contrôlées et gérées.
Utilisez des tables EXTERNES lorsque :
- Le site est également utilisé en dehors de Hive . Par exemple, les fichiers de données sont lus et traités par un programme existant qui ne verrouille pas les fichiers.
- Les données doivent rester dans l'emplacement sous-jacent même après un DROP TABLE. Cela peut s'appliquer si vous pointez plusieurs schémas (tables ou vues) sur un seul ensemble de données ou si vous itérez parmi plusieurs schémas possibles.
- La ruche ne doit pas posséder de données et contrôler les paramètres, les répertoires, etc. ., vous avez peut-être un autre programme ou un autre processus qui fait ces choses.
- Vous ne créez pas une table basée sur une table existante (AS SELECT).
Utilisez les tableaux INTERNES lorsque :
- Le site les données sont temporaires .
- Vous voulez Hive pour gérer complètement le cycle de vie de la table et des données. .
Source :
HDInsight : Introduction aux tables internes et externes de Hive
Les données d'une table interne sont stockées dans le dossier de l'entrepôt, tandis que les données d'une table externe sont stockées à l'endroit que vous avez mentionné lors de la création de la table.
Ainsi, lorsque vous supprimez une table interne, vous supprimez le schéma ainsi que les données sous le dossier de l'entrepôt, mais pour une table externe, c'est uniquement le schéma que vous perdrez.
Ainsi, lorsque vous souhaitez récupérer une table externe après l'avoir supprimée, vous pouvez créer à nouveau une table avec le même schéma et la faire pointer vers l'emplacement des données d'origine. J'espère que c'est clair maintenant.
La seule différence de comportement (et non l'utilisation prévue), d'après les recherches et les tests limités que j'ai effectués jusqu'à présent (en utilisant Hive 1.1.0 -cdh5.12.0), semble être que lorsqu'une table est supprimée
- Les données des tables internes (gérées) sont supprimées du système de fichiers HDFS.
- tandis que les données des tables externes ne sont PAS supprimées du système de fichiers HDFS.
(REMARQUE : voir la section " Tableaux gérés et externes " dans le document intitulé https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL qui énumère quelques autres différences que je n'ai pas complètement comprises)
Je crois que Hive choisit l'emplacement où il doit créer la table en fonction de la préséance suivante, de haut en bas
- Emplacement défini lors de la création de la table
- Emplacement défini dans la création de la base de données/du schéma dans lequel la table est créée.
- Répertoire par défaut de l'entrepôt de ruches (propriété hive.metastore.warehouse.dir dans hive.site.xml)
Lorsque l'option "Emplacement" n'est pas utilisée lors de la "création d'une table de ruche", la règle de préséance ci-dessus est utilisée. Ceci est applicable aux tables internes et externes. Cela signifie qu'une table interne ne doit pas nécessairement résider dans le répertoire Warehouse et peut résider n'importe où ailleurs.
Remarque : il se peut que j'aie oublié certains scénarios, mais d'après mon exploration limitée, le comportement des tables internes et externes semble être le même, à l'exception de la seule différence (suppression des données) décrite ci-dessus. J'ai essayé les scénarios suivants pour les tables internes et externes.
- Création d'un tableau avec et sans l'option Location
- Créer une table avec et sans option de partition
- Ajout de nouvelles données à l'aide des instructions Hive Load et Insert
- Ajout de fichiers de données à l'emplacement de la table en dehors de Hive (à l'aide de commandes HDFS) et rafraîchissement de la table à l'aide de la commande "MSCK REPAIR TABLE".
- Faire tomber les tables
- Réponses précédentes
- Plus de réponses