web-dev-qa-db-fra.com

Différence entre «charger les données dans le chemin» et «emplacement» dans la ruche?

Dans mon entreprise, je vois ces deux commandes fréquemment utilisées, et j'aimerais être conscient des différences, car leurs fonctionnalités me semblent les mêmes:

1

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

2

create table <mytable>
(name string,
number double);

location '/directory-path/file.csv';

Ils copient tous les deux les données du répertoire sur HDFS dans le répertoire de la table sur Hive. Existe-t-il des différences dont il faut être conscient lors de leur utilisation? Je vous remercie.

8
Hunle

Oui, ils sont utilisés à des fins différentes.

La commande load data inpath est utilisée pour charger les données dans la table Hive. "LOCAL" signifie que le fichier d'entrée se trouve sur le système de fichiers local. Si "LOCAL" est omis, il recherche le fichier dans HDFS.

load data inpath '/directory-path/file.csv' into <mytable>; 
load data local inpath '/local-directory-path/file.csv' into <mytable>;

[~ # ~] emplacement [~ # ~] mot-clé permet de pointer vers n'importe quel emplacement HDFS pour son stockage, plutôt que d'être stocké dans un dossier spécifié par la propriété de configuration Hive.metastore.warehouse.dir .

En d'autres termes, avec LOCATION '/your-path/' Spécifié, Hive n'utilise pas d'emplacement par défaut pour cette table. Cela est utile si vous avez déjà généré des données.

N'oubliez pas que LOCATION peut être spécifié uniquement sur les tables EXTERNES. Pour les tables régulières, l'emplacement par défaut sera utilisé.

Pour résumer, charger les données dans le chemin dire à Hive où chercher les fichiers d'entrée et [~ # ~] emplacement [~ # ~] Le mot clé indique à Hive où enregistrer les fichiers de sortie sur HDFS.

Références: https://cwiki.Apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL

10
Sachin Gaikwad

Option 1: table interne

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

Cette commande supprimera le contenu du répertoire source et créera une table interne

Option 2: table externe

 create table <mytable>
 (name string,
 number double);

location '/directory-path/file.csv';

Créez une table externe et copiez les données dans la table. Désormais, les données ne seront plus déplacées de la source. Vous pouvez supprimer une table externe mais les données source sont toujours disponibles.

Lorsque vous supprimez une table externe, elle supprime uniquement les métadonnées de la table Hive. Les données existent toujours à l'emplacement du fichier HDFS.

Jetez un œil à ces questions SE liées aux cas d'utilisation des tables internes et externes

Différence entre les tables internes Hive et les tables externes?

4
Ravindra babu