Hadoop 配置单元:创建表为选择命令无法指定目标表的列列表

Hadoop 配置单元:创建表为选择命令无法指定目标表的列列表,hadoop,hive,Hadoop,Hive,我怎样才能做到这一点 hive> desc temp; OK a int b int Time taken: 0.077 seconds, Fetched: 2 row(s) 我想创建列名为c和d的t2配置单元表,但出现以下错误

我怎样才能做到这一点

  hive> desc temp;
  OK
  a                     int                                         
  b                     int                                         
  Time taken: 0.077 seconds, Fetched: 2 row(s)
我想创建列名为c和d的t2配置单元表,但出现以下错误

  hive> create table t2(c int,d int) as select a,b from temp;
  FAILED: SemanticException [Error 10065]: CREATE TABLE AS SELECT command         cannot specify the list of columns for the target table

在指定从另一个表获取模式时,无需再次提及表模式。因此,您的表创建语句应该如下

create table t2 as select a,b from temp;

在指定从另一个表获取模式时,无需再次提及表模式。因此,您的表创建语句应该如下

create table t2 as select a,b from temp;

我知道这很古老,但根据定义,但如果其他人有同样的问题,答案很简单

根据定义,
createtableasselect
用于将结果集持久化为表。这意味着,如果希望新表具有不同的列名,则需要使用不同的结果集来创建它。一种简单的方法是使用列别名:

create table t2 as select a as c, b as d from temp;

我知道您说过不想这样做(虽然有一个小的输入错误-您的查询将失败,因为它将尝试命名两个列c),但希望这可以解释为什么您应该这样做:您需要构建一个元数据与您要创建的表匹配的数据集。

我知道这是一个很旧的问题,但根据定义,但如果其他人也有同样的问题,答案很简单

根据定义,
createtableasselect
用于将结果集持久化为表。这意味着,如果希望新表具有不同的列名,则需要使用不同的结果集来创建它。一种简单的方法是使用列别名:

create table t2 as select a as c, b as d from temp;

我知道您说过不想这样做(虽然有一个小的输入错误-您的查询将失败,因为它将尝试命名两个列c),但希望这能解释为什么您应该这样做:您需要构建一个元数据与您要创建的表相匹配的数据集。

但我希望更改t2的列名。我也不想这样做:创建表t2作为从temp中选择a c,b c;你不能那样做。创建表后,可以使用alter语句更改列名。ALTER TABLE TABLE_name CHANGE[COLUMN]col_old_name col_new_name COLUMN_type[COMMENT col_COMMENT][FIRST |在COLUMN_name之后],但我想更改t2的列名。我也不想这样做:创建表t2作为从temp中选择a c,b c;你不能那样做。创建表后,可以使用alter语句更改列名。ALTER TABLE TABLE_name CHANGE[列]col_old_name col_new_name COLUMN_type[注释col_COMMENT][FIRST |在COLUMN_name之后]