【问题标题】:How to rename auto-named column如何重命名自动命名的列
【发布时间】:2020-04-25 10:26:24
【问题描述】:

我使用 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


    【解决方案1】:

    关键在于正确转义_c0

    ALTER TABLE my_table CHANGE `_c0` my_col STRING;
    

    这可以正常工作

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多