Экспорт в формате csv в улей beeline

Я пытаюсь экспортировать таблицу hive в виде csv в Beeline hive. Когда я запускаю команду !sql select * from database1 > /user/bob/output.csv это дает мне синтаксическая ошибка.

Я успешно подключился к базе данных в этот момент, используя приведенную ниже команду. Запрос выводит результаты на консоль.

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

кроме того, не очень ясно, где заканчивается файл. Это должен быть путь к файлу в hdfs правильно?

2 ответов


когда версия улья по крайней мере 0.11.0 вы можете выполнить:

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

из улья / Билайн в магазин Стол в каталоге на локальной файловой системе.


кроме того, с помощью beeline сохраните запрос SELECT в файле yourSQLFile.SQL и выполнить:

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

также это будет хранить результат в файл в локальной файловой системе.


от улья, хранить данные где-то в Файловую систему 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;

затем вы можете собирать данные в локальный файл через:

hdfs dfs -getmerge /WhereDoYou/Like

это еще один вариант получения данных только с помощью 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" 

работает на:

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

У вас есть различные варианты.

1) Вы можете контролировать до точки, как производится вывод beeline, а затем просто сохранить его в файл с linux. Например

beeline --outputformat=csv2 xxx > выход.csv (смотрите соответствующие параметры из справки beeline ниже)

2) для большего контроля и лучшей производительности я написал небольшой инструмент Java один раз. Его действительно только пара строк кода jdbc.

3) и, наконец, как Ана писала. Желающие могут просто запишите таблицу во внешнюю таблицу в HDFS и укажите формат вывода, который вы хотите.

Как

создать поля с разделителями внешнего формата тестовых строк таблицы, заканчивающиеся на ' / 'location" /tmp / myfolder " как select * from mytable;

вы можете получить этот вывод в локальной файловой системе с помощью

hadoop fs-getmerge/tmp / myfolder myoutput.csv