从现有的外部部分表创建新的配置单元表

mzsu5hc0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(403)

我有一个几乎有500个分区的外部分区表。我正在尝试创建另一个具有与旧表相同属性的外部表。然后我要将所有分区从旧表复制到新创建的表中。下面是我的create table查询。我的旧表存储为textfile,我想将新表保存为orc文件。

'add jar json_jarfile;
 CREATE EXTERNAL TABLE new_table_orc (col1,col2,col3...col27)
 PARTITIONED BY (year string, month string, day string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
 WITH SERDEPROPERTIES (....)
 STORED AS orc
 LOCATION 'path';'

在创建这个表之后。我正在使用下面的查询将分区从旧表插入到新表中。我只想将几列从原始表复制到新表中

'set hive.exec.dynamic.partition=true;
 set hive.exec.dynamic.partition.mode=nonstrict;
 INSERT OVERWRITE TABLE new_table_orc PARTITION (year,month,day) SELECT     col2,col3,col6,year,month,day FROM old_table;
 ALTER TABLE new_table_orc RECOVER PARTITIONS;'

我在犯错误。

'FAILED: SemanticException [Error 10044]: Line 2:23 Cannot insert into target table because column number/types are different 'day': Table insclause-0 has 27 columns, but query has 6 columns.'

有什么建议吗?

o4tp2gmn

o4tp2gmn1#

查询必须与新表中列的数量和类型匹配。您已经创建了包含27个常规列和3个分区列的新表,但是您的查询只选择了6列。
如果您真的只关心这六列,那么请修改新表,使其只包含这些列。如果确实需要所有列,请修改select语句以选择所有这些列。
您也不需要“recover partitions”语句。当您插入带有动态分区的表时,它将在文件系统和元存储中创建这些分区。

相关问题