Подтвердить что ты не робот

Загрузка данных из файла .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?

4b9b3361

Ответ 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

шаги:

  1. Сначала создайте таблицу, используя сохраненный как TEXTFILE (т.е. по умолчанию или в любом формате, который вы хотите создать таблицу)
  2. Загрузить данные в текстовую таблицу.
  3. Создать таблицу, используя сохраненный как ORC как select * from text_table;
  4. Выберите * из таблицы орков.

Пример:

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/