Как переименовать столбец с автоматическим именем - PullRequest
0 голосов
/ 08 января 2020

Я создал таблицу с использованием CTAS, и теперь она имеет автоматически сгенерированное имя (а именно, _c0). Я не могу переименовать это с помощью классического ALTER TABLE <name> CHANGE _c0 new_name STRING. Как бы я переименовал его?

Создание таблицы:

CREATE TABLE my_table AS
SELECT my_udf(col_1)
FROM other_table
;

my_table теперь содержит один столбец: _c0.

Попытка изменить имя столбца:

ALTER TABLE my_table CHANGE _c0 my_col STRING;

В результате:

Error while compiling statement: FAILED: ParseException line 1:71 cannot recognize input near '_c0' 'my_col' 'STRING' in rename column name

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Hive рассматривает имена, начинающиеся с _c, как внутренние имена, к которым пользователи не могут получить непосредственный доступ. Когда вы запустите explain some_query, вы увидите использование _col0 или что-то подобное.

Один из обходных путей - заключить имя столбца в кавычки. Или просто укажите допустимый псевдоним для каждого из этих столбцов, созданных с помощью CTAS, так что alter не требуется.

CREATE TABLE my_table AS
SELECT my_udf(col_1) AS my_col
FROM other_table
;
0 голосов
/ 08 января 2020

Ключ кроется в правильном экранировании _c0:

ALTER TABLE my_table CHANGE `_c0` my_col STRING;

Это работает правильно

...