无法从配置单元中的外部表加载具有maptype列(复杂数据类型)的托管表



我有一个数据类型复杂的外部表(map(string,array(struct((,我可以毫无问题地选择和查询这个外部表。但是,如果我试图将这些数据加载到托管表中,它将永远运行。有没有最好的方法将这些数据加载到配置单元中的托管表?

CREATE EXTERNAL TABLE DB.TBL( 
id string ,
list map<string,array<struct<ID:string,col:boolean,col2:string,col3:string,col4:string>>> 
) LOCATION <path>

BTW,您可以将表转换为托管表(尽管由于仓库目录限制,这可能不适用于cloudera分发(:

use DB;
alter table TBLSET TBLPROPERTIES('EXTERNAL'='FALSE');

如果您需要加载到另一个托管表中,您可以简单地将文件复制到它的位置。

--创建托管表(或使用现有表(

use db;
create table tbl_managed(id string, 
list map<string,array<struct<ID:string,col:boolean,col2:string,col3:string,col4:string>>> ) ;
--Check table location
use db;
desc formatted tbl_managed;

这将打印位置和其他信息,使用它来复制文件。

将所有文件从外部表位置复制到托管表位置,这将最有效地工作,比插入快得多。。选择:

hadoop fs -cp external/location/path/* managed/location/path

复制文件后,可以选择表格。您可能需要分析表来计算统计信息:

ANALYZE TABLE db_name.tablename COMPUTE STATISTICS [FOR COLUMNS] 

最新更新