Хотя его можно использовать INSERT OVERWRITE
для получения данных из Hive, это может быть не лучший метод для вашего конкретного случая. Сначала позвольте мне объяснить, что INSERT OVERWRITE
это такое, а затем я опишу метод, который я использую для получения файлов tsv из таблиц Hive.
Согласно руководству , ваш запрос сохранит данные в каталоге в HDFS. Формат не будет csv.
Данные, записанные в файловую систему, сериализуются в виде текста со столбцами, разделенными символом ^ A, и строками, разделенными символами новой строки. Если какой-либо из столбцов не является примитивным типом, эти столбцы сериализуются в формат JSON.
Небольшая модификация (добавление LOCAL
ключевого слова) сохранит данные в локальном каталоге.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
Когда я запускаю аналогичный запрос, вот как выглядит результат.
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
Лично я обычно запускаю свой запрос напрямую через Hive в командной строке для такого рода вещей и перенаправляю его в локальный файл следующим образом:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
Это дает мне файл с разделителями табуляции, который я могу использовать. Надеюсь, это будет полезно и для вас.
Основываясь на этом патче 3682 , я подозреваю, что при использовании Hive 0.11 доступно лучшее решение, но я не могу проверить это сам. Новый синтаксис должен позволять следующее.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
Надеюсь, это поможет.
Если вам нужен файл CSV, вы можете изменить решения Lukas следующим образом (при условии, что вы используете Linux):
источник
Вы должны использовать оператор CREATE TABLE AS SELECT (CTAS) для создания каталога в HDFS с файлами, содержащими результаты запроса. После этого вам нужно будет экспортировать эти файлы из HDFS на ваш обычный диск и объединить их в один файл.
Вам также, возможно, придется проделать некоторые хитрости, чтобы преобразовать файлы из '\ 001' с разделителями в CSV. Вы можете использовать собственный CSV-файл SerDe или выполнить постобработку извлеченного файла.
источник
Вы можете использовать
INSERT
……DIRECTORY
как в этом примере:OVERWRITE
иLOCAL
имеют те же интерпретации, что и раньше, а пути интерпретируются в соответствии с обычными правилами. Будет произведена запись в один или несколько файлов, в/tmp/ca_employees
зависимости от количества задействованных редукторов.источник
Если вы используете HUE, это тоже довольно просто. Просто перейдите в редактор Hive в HUE, выполните запрос улья, затем сохраните файл результатов локально как XLS или CSV, или вы можете сохранить файл результатов в HDFS.
источник
Я искал подобное решение, но упомянутые здесь не работали. В моих данных были все варианты пробелов (пробел, новая строка, табуляция), символов и запятых.
Чтобы сделать tsv данных столбца безопасным, я заменил все символы \ t в данных столбца пробелом и выполнил код python в командной строке для создания файла csv, как показано ниже:
Это создало совершенно корректный csv. Надеюсь, это поможет тем, кто ищет это решение.
источник
Вы можете использовать строковую функцию улья
CONCAT_WS( string delimiter, string str1, string str2...strn )
например:
источник
Это наиболее удобный для csv способ вывода результатов HiveQL.
Вам не нужны никакие команды grep или sed для форматирования данных, вместо этого hive поддерживает их, просто нужно добавить дополнительный тег outputformat.
источник
У меня была аналогичная проблема, и вот как я смог ее решить.
Шаг 1. Загрузили данные из таблицы Hive в другую таблицу следующим образом.
Шаг 2. Скопируйте большой двоичный объект со склада Hive в новое место с соответствующим расширением.
источник
или же
Для tsv просто измените csv на tsv в приведенных выше запросах и запустите свои запросы.
источник
Разделитель по умолчанию - "
^A
". На языке Python это "\x01
".Когда я хочу изменить разделитель, я использую SQL, например:
Затем рассмотрите разделитель + "
^A
" как новый разделитель.источник
Я пробовал разные варианты, но это было бы одно из самых простых решений
Python
Pandas
:Вы также можете использовать
tr "|" ","
для преобразования "|" к ","источник
Подобно ответу Рэя выше, Hive View 2.0 на платформе данных Hortonworks также позволяет запускать запрос Hive, а затем сохранять результат как csv.
источник
Если вы делаете это из Windows, вы можете использовать скрипт Python hivehoney для извлечения данных таблицы в локальный файл CSV.
Так и будет:
Выполните это так:
источник
Просто чтобы охватить больше следующих шагов после запуска запроса:
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select books from table;
В моем случае сгенерированные данные в папке temp имеют
deflate
формат и выглядят так:Вот команда, чтобы распаковать файлы deflate и поместить все в один файл csv:
источник
Я могу опоздать к этому, но помогу с ответом:
echo "COL_NAME1 | COL_NAME2 | COL_NAME3 | COL_NAME4"> SAMPLE_Data.csv куст -e 'выбрать отдельный concat (COL_1, "|", COL_2, "|", COL_3, "|", COL_4) из table_Name, где условие, если требуется;' >> SAMPLE_Data.csv
источник
Эта команда оболочки выводит выходной формат в формате CSV
output.txt
без заголовков столбцов.источник
Используйте команду:
hive -e "использовать [имя_базы_данных]; выбрать * из [имя_таблицы] LIMIT 10;" > /path/to/file/my_file_name.csv
У меня был огромный набор данных , детали которого я пытался систематизировать и определить типы атак и количество каждого типа. Пример, который я использовал в своей практике, который работал (и имел немного больше деталей), выглядит примерно так:
источник