如何重命名自动命名的列
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
;
我使用 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
;