2016-10-10 3 views
0

У меня есть 200 операторов Insert в одном файле (test.hql), чтобы вставить их в таблицу hive для формата ORC. Каждая вставка занимает значительное время (40 секунд), что делает полный процесс приблизиться к 2 часа. Есть ли способ ускорить работу?Слишком длинная инструкция вставки HIve

Я мог бы создать таблицу tmp (текстового формата), а затем просто выполнить перестановку вставки, но это не разрешено. Я не могу создавать новые DDL. -> Один из вариантов - разбить test.hql в оболочке и выполнять в параллельных процессах. Есть ли другой способ, которым я могу быстро вставлять эти вставки в Hive?

ответ

0

Многие инструкции вставки медленнее, чем один. Превратите свой 200 вставки в один один с помощью UNION ALL:

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] 
select value1 as col1, value2 as col2... coln from default.dual union all 
select value1 as col1, value2 as col2... coln from default.dual union all 
... 
select value1 as col1, value2 as col2... coln from default.dual; 
+0

Если бы вы тоже это пробовали .. – ssp12

0

Лучше вы можете создать входной файл и сразу же загрузить в таблицу.

Создать таблицу с определенным форматом строк (с разделителями)

Создание тестовой таблицы (строка, строка) б полей формата строки заканчиваются «» хранится в виде текстового файла;

, а затем загрузить данные в него,

LOAD DATA inpath "/ путь" в таблице table_name;

+0

Да, уже сделал это - Но теперь не могу создать DDL, требования к проекту Kindof – ssp12

+0

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

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