web-dev-qa-db-fra.com

Exporter au format csv dans une ruche beeline

J'essaie d'exporter ma table Hive en tant que csv dans beeline Hive. Lorsque j'exécute la commande !sql select * from database1 > /user/bob/output.csv cela me donne une erreur de syntaxe.

J'ai réussi à me connecter à la base de données à ce stade en utilisant la commande ci-dessous. La requête renvoie les résultats corrects sur la console.

beeline -u 'jdbc:Hive2://[databaseaddress]' --outputformat=csv

Aussi, pas très clair où le fichier se termine. Ce devrait être le chemin du fichier dans hdfs correct?

17
Defcon

Lorsque la version Hive est au moins 0.11.0, vous pouvez exécuter:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/directoryWhereToStoreData' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','  
LINES TERMINATED BY "\n"
SELECT * FROM yourTable;

depuis Hive/beeline pour stocker la table dans un répertoire sur le système de fichiers local.


Alternativement, avec beeline, enregistrez votre requête SELECT dans yourSQLFile.sql et exécutez:

beeline -u 'jdbc:Hive2://[databaseaddress]' --outputformat=csv2 -f yourSQlFile.sql > theFileWhereToStoreTheData.csv 

Cela stockera également le résultat dans un fichier dans le système de fichiers local.


Depuis Hive, pour stocker les données quelque part dans HDFS:

CREATE EXTERNAL TABLE output 
LIKE yourTable 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
LOCATION 'hfds://WhereDoYou/Like';

INSERT OVERWRITE TABLE output SELECT * from yourTable;

alors vous pouvez collecter les données dans un fichier local en utilisant:

hdfs dfs -getmerge /WhereDoYou/Like

Ceci est une autre option pour obtenir les données en utilisant uniquement beeline:

env HADOOP_CLIENT_OPTS="-Ddisable.quoting.for.sv=false" beeline -u "jdbc:Hive2://your.Hive.server.address:10000/" --incremental=true --outputformat=csv2 -e "select * from youdatabase.yourtable" 

Travaille sur:

Connected to: Apache Hive (version 1.1.0-cdh5.10.1)
Driver: Hive JDBC (version 1.1.0-cdh5.10.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.1.0-cdh5.10.1 by Apache Hive
26
ozw1z5rd

Vous avez différentes options.

1) Vous pouvez contrôler jusqu'à un certain point la façon dont la sortie beeline est effectuée, puis simplement l'enregistrer dans un fichier avec linux. Par exemple

beeline --outputformat = csv2 xxx> output.csv (voir les paramètres pertinents de l'aide beeline ci-dessous)

2) Pour plus de contrôle et de meilleures performances, j'ai écrit un petit Java une fois. Ce n'est vraiment que quelques lignes de code jdbc.

3) et enfin comme l'a écrit Ana. Yopu peut simplement écrire une table dans une table externe en HDFS et spécifier le format de sortie souhaité.

Comme

créer un test de table externe Champs délimités par ROW FORMAT terminés par '|' l'emplacement "/ tmp/myfolder" comme sélectionnez * dans mytable;

vous pouvez ensuite obtenir cette sortie dans le système de fichiers local avec

hadoop fs -getmerge/tmp/myfolder myoutput.csv

0
AMRESH PANDEY

Vous pouvez utiliser cette commande pour enregistrer la sortie au format CSV de beeline:

beeline -u 'jdbc:Hive2://bigdataplatform-dev.nam.nsroot.net:10000/;principal=Hive/[email protected];ssl=true' --outputformat=csv2 --verbose=false  --fastConnect=true   --silent=true -f $query_file>out.csv

Enregistrez votre fichier de requête SQL dans $ query_file.

Le résultat sera dans out.csv.

J'ai un exemple complet ici: hivehoney

0
Alex B

La suite a fonctionné pour moi

Hive --silent=true --verbose=false --outputformat=csv2 -e "use <db_name>; select * from <table_name>" > table_name.csv


Un avantage par rapport à l'utilisation de beeline est que vous n'avez pas à fournir le nom d'hôte ou l'utilisateur/pwd si vous utilisez le nœud Hive.

Lorsque certaines colonnes ont des valeurs de chaîne avec des virgules, tsv (séparé par des tabulations) fonctionne mieux

Hive --silent=true --verbose=false --outputformat=tsv -e "use <db_name>; select * from <table_name>" > table_name.tsv
0
smishra