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?
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
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
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
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