2016-10-28 6 views
0

Итак, у меня есть таблица A и таблица B, где данные таблицы были вставлены из таблицы B. по существу таблица A такая же, как в таблице B, только разница что таблица A имеет столбец date_partition, где таблица B не указана. столе схемы как таковой: ID междунар school_bg_dt строка log_on_count INT active_count INTКак настроить динамический раздел, где ключи столбца будут разделом

таблица B схемы является: ID INT school_bg_dt BIGINT log_on_count INT active_count INT date_partition строка

здесь мой запрос о включении таблицы B в таблицу A, которая имеет ошибку, которую я не могу определить:

set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict; 
INSERT OVERWRITE TABLE A PARTITION(date_partition=school_bg_dt) 
SELECT ID, cast(school_bg_dt as BIGINT), log_on_count, active_count FROM table 
B; 

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

ответ

0

От here:

В динамических вставках разделов, пользователи могут давать частичные спецификации разделов, что означает просто указать список имен столбцов разделов в предложении PARTITION. Значения столбцов являются необязательными. Если задано значение столбца раздела, мы называем это статическим разделом, иначе это динамический раздел. Каждый столбец динамического раздела имеет соответствующий входной столбец из оператора select. Это означает, что создание динамического разбиения определяется значением входного столбца. Столбцы динамического раздела должны быть указаны последними среди столбцов в инструкции SELECT и в том же порядке, в котором они появляются в предложении PARTITION().

Итак, попробуйте:

FROM B 
INSERT OVERWRITE TABLE A PARTITION(date_partition) 
SELECT ID, cast(school_bg_dt as BIGINT), log_on_count, active_count, school_bg_dt as date_partition; 

Кроме того, обратите внимание, что если вы создаете много разделов, вы должны обновить следующие параметры КОНФЕР:

  • hive.exec.max.dynamic .partitions.pernode - Максимальное количество динамических разделов разрешено создавать в каждом узле mapper/редуктора (по умолчанию = 100)
  • hive.exec.max.dynamic.partitions - Maximum nu mber из динамических разделов разрешено создавать всего (по умолчанию = 1000)
  • hive.exec.max.created.files - Максимальное количество файлов HDFS, созданных всеми картографами/редукторами в задании MapReduce (по умолчанию = 100000)
+0

Спасибо Алекс, но это не удалось, это говорит об ошибке выполнения, код возврата 2 из org.apache.hadoop.hive.ql.exec.mr.MapRedTask – Misha

+0

@Michelle Пожалуйста, попробуйте использовать новый синтаксис после редактирования –

+0

Alex , это не сработало, настройка conf ожидает тип INT, но мой столбец разделов нуждается в типе String – Misha