我使用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
关键在于正确地转义_c0
:
ALTER TABLE my_table CHANGE `_c0` my_col STRING;
这可以正常工作
Hive将以_c
开头的名称视为内部名称,用户无法直接访问它们。运行explain some_query
时,会看到用法_col0
或类似的用法。
一种解决方法是用反引号将列名引起来。或者只为使用CTAS创建的每个列指定一个有效的别名,因此不需要alter
。
CREATE TABLE my_table AS
SELECT my_udf(col_1) AS my_col
FROM other_table
;