Загрузка данных из файла .txt в таблицу, хранящуюся как ORC в Hive
У меня есть файл данных, который находится в формате .txt
. Я использую файл для загрузки данных в таблицы Hive. Когда я загружаю файл в таблицу, например
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;
данные загружаются правильно, используя
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;
и я могу запустить SELECT * FROM test_details_txt;
в таблице в Hive.
Однако, если я попытаюсь загрузить данные в таблицу
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC;
Я получаю следующую ошибку при попытке выполнить SELECT:
Failed with exception java.io.IOException:java.io.IOException: Malformed ORC file hdfs://master:6000/user/hive/warehouse/test.db/transaction_details/test_details.txt. Invalid postscript.
При загрузке данных с использованием вышеуказанного оператора LOAD я не получаю никаких ошибок или исключений.
Есть ли что-то еще, что нужно сделать, используя команду LOAD DATA IN PATH..
для хранения данных в таблице ORC?
Ответы
Ответ 1
LOAD DATA
просто копирует файлы для хранения файлов данных. Куст не выполняет никаких преобразований при загрузке данных в таблицы.
Итак, в этом случае входной файл /home/user/test_details.txt
должен быть в формате ORC, если вы загружаете его в таблицу ORC.
Возможным обходным путем является создание временной таблицы с STORED AS TEXT
, затем LOAD DATA
в нее, а затем скопировать данные из этой таблицы в таблицу ORC.
Вот пример:
CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;
-- Load into Text table
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;
-- Copy to ORC table
INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;
Ответ 2
шаги:
- Сначала создайте таблицу, используя сохраненный как TEXTFILE (т.е. по умолчанию или в любом формате, который вы хотите создать таблицу)
- Загрузить данные в текстовую таблицу.
- Создать таблицу, используя сохраненный как ORC как select * from text_table;
- Выберите * из таблицы орков.
Пример:
CREATE TABLE text_table(line STRING);
LOAD DATA 'path_of_file' OVERWRITE INTO text_table;
CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;
SELECT * FROM orc_table; /*(it can now be read)*/
Ответ 3
Так как Hive не делает никакого преобразования к нашим входным данным, формат должен быть одним и тем же: либо файл должен быть в формате ORC, либо мы можем загружать данные из текстового файла в текстовую таблицу в Hive.
Ответ 4
Шаги по загрузке данных в формат файла ORC в улье
1.Создайте одну обычную таблицу, используя формат textFile
2. Загрузите данные обычно в эту таблицу
3.Создайте одну таблицу со схемой ожидаемых результатов вашей обычной таблицы улей, сохраненной как orcfile
4.Insert переписать запрос для копирования данных из таблицы textFile в таблицу orcfile
Обратитесь к блогу, чтобы узнать, как загружать данные во все форматы файлов в улье
Загрузка данных во все форматы файлов в улье
Ответ 5
ORC файл - это формат двоичного файла, поэтому вы не можете напрямую загружать текстовые файлы в таблицы ORC.
ORC означает Optimized Row Columnar, что означает, что он может хранить данные оптимизированным образом, чем другие форматы файлов. ORC уменьшает размер исходных данных до 75%. В результате скорость обработки данных также увеличивается. ORC показывает лучшую производительность, чем форматы Text, Sequence и RC.
Файл ORC содержит данные строк в группах, называемых Stripes, вместе с нижним колонтитулом. Формат ORC улучшает производительность, когда Hive обрабатывает данные.
Сначала вам нужно создать одну обычную таблицу как textFile, загрузить ваши данные в таблицу textFile, а затем вы можете использовать запрос перезаписи вставки для записи ваших данных в файл ORC.
create table table_name1 (schema of the table) row format delimited by ',' | stored as TEXTFILE
create table table_name2 (schema of the table) row format delimited by ',' | stored as ORC
load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)
INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;
Теперь все ваши данные будут сохранены в файле ORC.
Подобная процедура применяется ко всем форматам двоичных файлов, то есть файлам последовательности, файлам RC и файлам Parquet в Hive.
Подробнее см. ссылку ниже.
https://acadgild.com/blog/file-formats-in-apache-hive/