#hadoop #hive #hiveql
#hadoop #улей #hiveql
Вопрос:
Я пытаюсь создать секционированную таблицу с использованием динамического разбиения, но я столкнулся с проблемой. Я использую Hive 0.12 в песочнице Hortonworks 2.0.
set hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
однако это не работает.. Я получаю сообщение об ошибке.
Вот запрос для создания таблицы demo_stg:
create table demo_stg
(
country STRING,
stadt STRING,
geograph_breite FLOAT,
id INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "73";
И demo_tab:
CREATE TABLE demo_tab
(
stadt STRING,
geograph_breite FLOAT,
id INT
)
PARTITIONED BY (land STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "73";
- Таблица demo_stg также заполнена данными, поэтому она не пуста.
Спасибо за помощь 🙂
Комментарии:
1. Какую ошибку вы получаете?
2. Также попробуйте добавить SET hive.exec.dynamic.partition.mode = nonstrict;
3. Если я попытаюсь запустить «SET hive.exec.dynamic.partition.mode = nonstrict;», я получаю сообщение об ошибке. И каждое сообщение об ошибке, которое я получаю, выглядит так: «Произошла ошибка при выполнении запроса улья: неизвестное исключение».
Ответ №1:
Вам необходимо изменить свой выбор:
set hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
Я не уверен, в какой столбец на вашем демонстрационном этапе вы хотите выполнить разбиение или какой столбец в демо соответствует земле. Но каким бы ни был столбец, он должен присутствовать в качестве последнего столбца в select скажем, имя столбца вашей демонстрационной таблицы — id, поэтому ваш выбор должен быть записан как:
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country,t.id as land
FROM demo_stg t;
Я думаю, это должно сработать.
Комментарии:
1. Спасибо за вашу помощь 🙂 Выберите: «ВСТАВИТЬ ПЕРЕЗАПИСАТЬ ТАБЛИЦУ demo_tab РАЗДЕЛ (земля) ВЫБЕРИТЕ stadt, geograph_breite, id, т.е.страну,t.id как земля ИЗ demo_stg t;» работает!
2. Я рад, что это сработало. И приветствую вас. Кроме того, если у вас есть несколько столбцов для выбора раздела, они должны содержать несколько столбцов as в порядке, который вы указываете в предложении PARTITION после инструкции insert. Несколько дней назад я написал блог по тому же @ exploredatascience.blogspot.in/2014/06 /…
3.Из документа:
dynamic partition columns must be specified last among the columns in the SELECT statement and in the same order in which they appear in the PARTITION() clause
cwiki.apache.org/confluence/display/Hive /…
Ответ №2:
Столбец раздела должен быть последним столбцом в запросе выбора.
И еще одна вещь, помимо установки для раздела значения true, вам нужно установить режим на нестрогий:
set hive.exec.dynamic.partition.mode=nonstrict