2016-09-15 3 views
1

Я пытаюсь создать файл snappy.parquet из таблицы Hive. Для его большой секционированной таблицы нужна небольшая часть. Делать это:Результаты уюта сохранить как файл паркета

set parquet.compression=SNAPPY; 
set hive.exec.compress.output=true; 
set hive.exec.compress.intermediate=true; 
set hive.exec.parallel=true; 
set mapred.output.compress=true; 
set mapreduce.output.fileoutputformat.compress=true; 
set mapred.compress.map.output=true; 
set mapreduce.map.output.compress=true; 
set mapred.output.compression.type=BLOCK; 
set mapreduce.output.fileoutputformat.compress.type=BLOCK; 
set io.seqfile.compression.type = BLOCK; 
insert overwrite directory 'EXTERNAL_DIRECTORY' STORED AS PARQUET select * from SOURCE_TABLE; 

Это создает 000000_0 файл со следующей схемой:

message hive_schema { 
optional int32 _col0; 
optional binary _col1 (UTF8); 
optional binary _col2 (UTF8); 
optional binary _col3 (UTF8); 
optional binary _col4 (UTF8); 
optional binary _col5 (UTF8); 
optional binary _col6 (UTF8); 
optional binary _col7 (UTF8); 
optional int64 _col8; 
optional int64 _col9; 
optional int64 _col10; 
) 

Теряя все имена столбцов из source_table. Как я могу сохранить его правильно, поэтому я могу использовать его как таблицу улей позже?

+0

Похоже, вы пытаетесь создать новый набор данных, который является источником только из одного раздела большего набора исходных данных, правильно? Если это так, я бы просто создал новую внешнюю таблицу улья, которая выбирает все данные из конкретной таблицы, после которой вы находитесь. Тогда у вас будет таблица и каталог/файлы, доступные для использования. – Jared

+0

Да, я пытаюсь создать небольшой набор данных из пары разделов большой таблицы. Я попытаюсь создать новую таблицу hive и выбрать ее – lacerated

ответ

0

Я бы создал новую внешнюю таблицу для вашего набора данных, выбрав все данные из исходных разделов, которые вы после. Тогда у вас будет таблица и файл, которые можно использовать. Вы не можете создать таблицу create в качестве оператора выбора, начиная с внешних таблиц, поэтому вам нужно сначала создать таблицу, а затем загрузить в нее данные.

create external table yourNewTable (use your source table DDL...) 
    stored as parquet location '/yourNewLocation'; 

insert into yourNewTable 
    select * from yourSourceTable where yourPartitionedFieldNames = 'desiredPartitionName'; 
+0

Я получаю эту ошибку: «Ошибка при выполнении запроса куста: Ошибка при компиляции оператора: FAILED: SemanticException [Ошибка 10071]: Вставка во внешнюю таблицу не допускается' – lacerated

+0

Пробовал делать таблицу OVERWRITE с той же ошибкой. Я делаю что-то неправильно? – lacerated

+0

Убедитесь, что свойство set hive.insert.into.external.tables = true – Jared

Смежные вопросы