Bien qu'il soit possible d'utiliser INSERT OVERWRITE
pour extraire des données de Hive, ce n'est peut-être pas la meilleure méthode pour votre cas particulier. Permettez-moi tout d'abord d'expliquer ce qu'est un INSERT OVERWRITE
puis je décrirai la méthode que j'utilise pour obtenir des fichiers tsv à partir de tables Hive.
Selon le le manuel votre requête stockera les données dans un répertoire de HDFS. Le format ne sera pas csv.
Les données écrites dans le système de fichiers sont sérialisées sous forme de texte dont les colonnes sont séparées par des ^A et les lignes par des retours à la ligne. Si l'une des colonnes n'est pas de type primitif, elle est sérialisée au format JSON.
Une légère modification (ajout de l'élément LOCAL
) stocke les données dans un répertoire local.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
Lorsque j'exécute une requête similaire, voici à quoi ressemble le résultat.
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
Personnellement, j'ai l'habitude d'exécuter ma requête directement à travers Hive sur la ligne de commande pour ce genre de choses, et de l'envoyer dans le fichier local comme suit :
hive -e 'select books from table' > /home/lvermeer/temp.tsv
Cela me donne un fichier séparé par des tabulations que je peux utiliser. J'espère que cela vous sera utile.
Sur la base de ce patch-3682 Je pense qu'une meilleure solution est disponible avec Hive 0.11, mais je ne suis pas en mesure de la tester moi-même. La nouvelle syntaxe devrait permettre ce qui suit.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
J'espère que cela vous aidera.