Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result
является undefined
в вашем примере кода.
LOAD DATA
просто копирует файлы в файлы данных hive.
В этом случае входной файл /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;
Так как Hive не преобразовывает наши входные данные, формат должен быть одинаковым: либо файл должен быть в формате ORC, либо мы можем загружать данные из текстового файла в текстовую таблицу в Hive.
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.
Подробнее см. ссылку ниже.
Шаги:
Пример:
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 not be read)*/