如何重命名自动命名的列

How to rename auto-named column

我使用 CTAS 创建了一个 table,它现在有一个自动生成的名称(即 _c0)。我无法使用经典 ALTER TABLE <name> CHANGE _c0 new_name STRING 重命名它。我该如何重命名它?

Table创作:

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
;