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

Я создаю временную таблицу из другой таблицы, используя предложение AS, в котором я включаю столбец раздела другой таблицы, который также является частью временной таблицы, а затем я получаю следующую ошибку. Ниже приведен оператор создания таблицы, где col4 - столбец раздела таблицы xyz.

И при запуске оператора create я получаю следующую ошибку. И когда я удаляю col4 из оператора create, он работает нормально.

Ошибка:

Ошибка при компиляции оператора: FAILED: NumberFormatException Для входной строки: «HIVE_DEFAULT_PARTITION» (состояние = 42000, код = 40000)

Пожалуйста помоги.

Пример:

CREATE TEMPORARY TABLE abc STORED AS PARQUET AS SELECT
col1 AS col1,
col2 AS col2,
col3 AS col3,
col4 AS col4
FROM xyz;

person abc    schedule 02.08.2018    source источник
comment
Возможный дубликат Получение ошибки в Hive при запуске сценария   -  person OneCricketeer    schedule 02.08.2018
comment
Что происходит, когда вы просто выбираете из xyz?   -  person leftjoin    schedule 06.08.2018
comment
он работает нормально, только когда я создаю таблицу tmp из многораздельной таблицы, она выдает ошибку. Теперь проблема решена, поскольку я добавил условие where для столбца раздела в приведенном выше сценарии. ОТ xyz, где col4 ›201802   -  person abc    schedule 10.08.2018


Ответы (1)


Это проблема с исходной таблицей xyz, потому что она содержит раздел __HIVE_DEFAULT_PARTITION__

Hive создает раздел со значением __HIVE_DEFAULT_PARTITION__, когда в режиме динамического раздела вставленное значение раздела равно NULL.

Раздел __HIVE_DEFAULT_PARTITION__ несовместим с числовым типом, и это вызывает ошибку, поскольку его нельзя преобразовать к числовому типу.

Чтобы удалить или запросить этот раздел, вам нужно сначала изменить тип столбца на строковый:

ALTER TABLE xyz PARTITION COLUMN (col4 string);

Конечно, вы можете сделать резервную копию таблицы и проверить данные перед удалением и решить, что делать с этими данными.

Чтобы удалить раздел:

ALTER TABLE xyz DROP PARTITION (col4 = '__HIVE_DEFAULT_PARTITION__');

После удаления раздела вы можете снова изменить тип столбца раздела на числовой.

person leftjoin    schedule 06.08.2018