Hive 配置单元更改表更改列名

Hive 配置单元更改表更改列名,hive,alter-table,alter,Hive,Alter Table,Alter,我正在尝试重命名配置单元中的columnName。是否有方法重命名配置单元中的列名 表A(第1、c1、c2栏) 到 表A(第1、2、3栏) ??: ALTER TABLE TABLE_name CHANGE[COLUMN]col_name col_new_name COLUMN\u type[COMMENT col_COMMENT][FIRST | AFTER colu name] 例如: CREATE TABLE test_change (a int, b int, c int); // w

我正在尝试重命名配置单元中的columnName。是否有方法重命名配置单元中的列名

表A(第1、c1、c2栏) 到 表A(第1、2、3栏) ??

ALTER TABLE TABLE_name CHANGE[COLUMN]col_name col_new_name COLUMN\u type[COMMENT col_COMMENT][FIRST | AFTER colu name]

例如:

CREATE TABLE test_change (a int, b int, c int);

// will change column a's name to a1
ALTER TABLE test_change CHANGE a a1 INT;
仅当“使用”-命令首次用于定义工作所在的数据库时,该命令才起作用。使用DATABASE.Table重命名表列语法会引发错误且不起作用。版本:Hive0.12

例如:

hive> ALTER TABLE databasename.tablename CHANGE old_column_name new_column_name;

  MismatchedTokenException(49!=90)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:617)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatementSuffixExchangePartition(HiveParser.java:11492)
        ...

hive> use databasename;

hive> ALTER TABLE tablename CHANGE old_column_name new_column_name;

OK
这是一个例子

hive> alter table test change userVisit userVisit2 STRING;      
    OK
    Time taken: 0.26 seconds
    hive> describe test;                                      
    OK
    uservisit2              string                                      
    category                string                                      
    uuid                    string                                      
    Time taken: 0.213 seconds, Fetched: 3 row(s)

在评论中@libjack提到了一个非常重要的问题。我想进一步说明一下。首先,我们可以通过
descripe检查表中的哪些列命令

有一个称为_c1的双列,当我们将数据从一个表移动到另一个表时,这些列由配置单元本身创建。为了处理这些列,我们需要将其写在backticks中

`_c1`
最后,ALTER命令将是

ALTER TABLE <table_namr> CHANGE `<system_genarated_column_name>` <new_column_name> <data_type>;
altertablechange`;

重命名从查询中自动生成的列名时,如_c1、_c1from OP,您必须用backtickstanks括起名称,此注释非常有用。我在很多地方寻找这个解决方案,但都找不到。感谢libjack。括号不适用于我,但“do”。请注意,如果是拼花地板表,则列更改不会更改任何基础数据。也就是说,如果表中已有数据,重命名列将不会使该列中的数据在新名称下可访问:从测试更改中选择一个;1更改表格测试\u更改a1 int;从测试变更中选择a1;null@mike_pdb当前位置我不确定这是有意的。我理解为什么会发生这种情况,也许兽人也有同样的问题,但我不确定这是“设计的”。你能创造一个JIRA吗?
ALTER TABLE <table_namr> CHANGE `<system_genarated_column_name>` <new_column_name> <data_type>;