2016-09-19 9 views
4

Ich versuche, meine Bienenstock-Tabelle als CSV in Beeline Bienenstock zu exportieren. Wenn ich den Befehl !sql select * from database1 > /user/bob/output.csv ausführen, gibt es mir Syntaxfehler.Export als CSV in Beeline Bienenstock

Ich habe erfolgreich an der Datenbank mit dem folgenden Befehl verbunden. Die Abfrage gibt die korrekten Ergebnisse auf der Konsole aus.

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

Auch nicht sehr klar, wo die Datei endet. Es sollte der Dateipfad in hdfs korrekt sein?

Antwort

7

Wenn hive Version mindestens 0.11.0 Sie ausführen können, dass die Ausgabe in dem lokalen Dateisystem erhalten können:

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

von Hive/beeline, um die Tabelle in einem Verzeichnis auf dem lokalen Dateisystem zu speichern.


Alternativ mit Beeline, speichern Sie Ihre SELECT-Abfrage in yourSQLFile.sql und läuft:

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

Auch diese speichert das Ergebnis in eine Datei in dem lokalen Dateisystem.


Von Bienenstock, um die Daten zu speichern, irgendwo in 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; 

dann können Sie die Daten in einer lokalen Datei sammeln mit:

hdfs dfs -getmerge /WhereDoYou/Like 

Diese weitere Option zu erhalten die Daten werden nur mit beeline verwendet:

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" 

Arbeiten an:

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 
+0

Eine seltsame Sache, die ich bemerkte, '--outputformat' doesn‘ entfernen t funktionieren, wenn Sie es nach der '-e' Abfrage oder' -f' Datei mit Abfrage-Schalter platzieren. Seltsamerweise dachte ich, dies wären benannte Argumente, aber Beeline ignoriert alle Argumente nach der Abfrage. Ich habe immer das Standardtabellenformat erhalten. – Davos

+0

Fügen Sie die Versionen hinzu, da das Hadoop-Ökosystem noch in Arbeit ist. – ozw1z5rd

+0

Ich benutze dies auf AWS, wenn ich 'beeline --version 'laufen lasse, zeigt es mir Hive 2.3.2-amzn-0 – Davos

0

Sie haben verschiedene Optionen.

1) Sie können bis zu einem gewissen Punkt steuern, wie die beeline-Ausgabe gemacht wird, und sie dann einfach in eine Datei mit linux speichern. Zum Beispiel

Beeline --outputformat = csv2 xxx> output.csv (siehe die entsprechenden Parameter aus der Beeline Hilfe unten)

2) für mehr Kontrolle und eine bessere Leistung Ich schrieb einmal ein kleines Java-Tool. Es ist wirklich nur ein paar Zeilen von JDBC-Code.

3) und schließlich wie Ana schrieb. Yopu kann einfach eine Tabelle in eine externe Tabelle in HDFS schreiben und das gewünschte Ausgabeformat angeben.

Wie

externe Tabelle Test ROW FORMAT getrennte Felder durch beendet erstellen '|' Position "/ tmp/myfolder" als * aus mytable auswählen;

Sie dann mit

hadoop fs -getmerge/tmp/myfolder myoutput.csv

+0

Ihre Antwort aus HDP Forum kopiert wird, könnten Sie etwas tun, um es zu verbessern ... auch ANA Namen – hisi