2015-08-13 3 views
3

У меня есть таблица Hive, которая была создана путем объединения данных из нескольких таблиц. Данные для этого находятся в папке с несколькими файлами («0001_1», «0001_2», ... и т. Д.). Мне нужно создать секционированную таблицу на основе поля даты в этой таблице с именем pt_dt (либо путем изменения этой таблицы, либо создания новой). Есть ли способ сделать это?Создание таблицы секционированного улья из таблицы без секционирования

Я попытался создать новую таблицу и вставить в него (ниже), который не работал

create external table table2 (acct_id bigint, eval_dt string) 
partitioned by (pt_dt string); 
insert into table2 
partition (pt_dt) 
select acct_id, eval_dt, pt_dt 
from jmx948_variable_summary; 

Это бросает ошибку

«FAILED: ошибка выполнения, код возврата 2 из org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce Jobs Запущен: Этап-этап-1: Карта: 189 Накопительный процессор: 401,68 сек Чтение HDFS: 0 HDFS Запись: 0 FAIL Всего MapReduce Время на процессорное время : 6 минут 41 секунда 680 мсек. "

ответ

3

Удалось выяснить после пробной версии & Ошибка.

Включить динамическое разделение в улье:

SET hive.exec.dynamic.partition = true; 
SET hive.exec.dynamic.partition.mode = nonstrict; 

Создать схему для секционированной таблицы:

CREATE TABLE table1 (id STRING, info STRING) 
PARTITIONED BY (tdate STRING); 

Вставить в секционированной таблице:

FROM table2 t2 
INSERT OVERWRITE TABLE table1 PARTITION(tdate) 
SELECT t2.id, t2.info, t2.tdate 
DISTRIBUTE BY tdate; 
0

В версии я работаю с ниже работ (Hive 0.14.0.2.2.4.2-2)

INSERT INTO TABLE table1 PARTITION(tdate) SELECT t2.id, t2.info, t2.tdate 

Из таблицы источника выберите столбец, который должен быть разделен на последней, в приведенном выше примере, дата выбрана в качестве последнего столбца в Select. Аналогичным образом, если один нуждается в таблице быть разделено на колонку «Информация», затем

INSERT INTO TABLE table1 PARTITION(info) SELECT t2.id, , t2.tdate, t2.info 

Если вы хотите создать таблицу с несколькими разделами избранного запрос должен быть я, что порядок. Если вы хотите разделить таблицу выше с «дата», а затем «информация»

INSERT INTO TABLE table1 PARTITION(date, info) SELECT t2.id, , t2.tdate, t2.info 

С «Информация», затем «дата»

INSERT INTO TABLE table1 PARTITION(info, date) SELECT t2.id, , t2.info, t2.tdate 
Смежные вопросы