繁体   English   中英

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

[英]Create new hive table from existing external portioned table

我有一个外部分区表,有近500个分区。 我正在尝试创建另一个具有与旧表相同的属性的外部表。 然后我想将旧表中的所有分区复制到新创建的表中。 下面是我的创建表查询。 我的旧表存储为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.'

有什么建议么?

您的查询必须与新表中列的数量和类型相匹配。 您已经创建了包含27个常规列和3个分区列的新表,但您的查询只选择了六列。

如果您真的只关心这六列,那么修改新表只包含那些列。 如果确实需要所有列,则修改select语句以选择所有这些列。

您也不需要“recover partitions”语句。 当您使用动态分区插入表时,它将在文件系统和Metastore中创建这些分区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM