如何重命名自动命名的列

问题描述 投票:0回答:2

我使用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
hive alter-table
2个回答
0
投票

关键在于正确地转义_c0

ALTER TABLE my_table CHANGE `_c0` my_col STRING;

这可以正常工作


0
投票

Hive将以_c开头的名称视为内部名称,用户无法直接访问它们。运行explain some_query时,会看到用法_col0或类似的用法。

一种解决方法是用反引号将列名引起来。或者只为使用CTAS创建的每个列指定一个有效的别名,因此不需要alter

CREATE TABLE my_table AS
SELECT my_udf(col_1) AS my_col
FROM other_table
;
© www.soinside.com 2019 - 2024. All rights reserved.