Экспорт как csv в улей билинга

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

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

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

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

Ответ 1

Если версия hive не меньше 0.11.0, вы можете выполнить:

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

из hive/beeline, чтобы сохранить таблицу в каталог в локальной файловой системе.


В качестве альтернативы, с 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

Ответ 2

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

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

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

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

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

Как

создать внешнюю таблицу test ROW FORMAT поля с разделителями, прерванные '|' location "/tmp/myfolder" как выбрать * из таблицы mytable;

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

hasoop fs -getmerge/tmp/myfolder myoutput.csv

Ответ 3

Вы можете использовать эту команду для сохранения вывода в формате CSV из 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

Сохраните файл SQL-запроса в $ query_file.

Результат будет в out.csv.

У меня есть полный пример здесь: Hivehoney

Ответ 4

Следующее сработало для меня

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


Одним из преимуществ использования beeline является то, что вам не нужно указывать имя хоста или пользователя /pwd, если вы работаете на узле куста.

Когда некоторые столбцы имеют строковые значения с запятыми, лучше использовать tsv (через табуляцию)

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