配置单元-从托管分区表中选择的行不完整



我需要将数据从CSV文件复制到配置单元中的托管分区表。

CSV文件行为:

id,nome,cognome,ruolo  
16,Mike,Maignan,Portiere    
23,Fikayo,Tomori,Centrale   
24,Simon,Kjaer,Centrale   
19,Theo,Hernandez,Terzino 
...

-------

我在ruolo列上创建了一个托管分区表。

create table squadre_part 
(id int, nome string, cognome string) 
partitioned by (ruolo string)  
row format delimited fields terminated by ','  
stored as textfile  
TBLPROPERTIES ("skip.header.line.count"="1") ;  

-------

然后我创建了一个外部表来从CSV文件加载数据(然后我将从外部表中选择数据并将其复制到托管分区表中(

create external table external_squadre  
(id int, nome string, cognome string, ruolo string)    
row format delimited fields terminated by ','    
stored as textfile    
location '/ulisse/prove/external/'    
TBLPROPERTIES ("skip.header.line.count"="1")  ;

-------

首先,我设置了这2个属性:

set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict; 

--------

当我把CSV文件放在/uisse/prove/external/HDFS目录中并从外部表执行select时,我看到了所有的行。

-------

在";复制";从外部表到托管表:

insert into squadre_part partition (ruolo) select * from external_squadre;

我只看到管理表中的几个行(???(。

奇怪的是,在HDSF中,在/user/hive/warehouse/<mydb>/<managed table>/...

我看到了所有的子目录(以及子目录中的文本文件(,以及原始CSV文件的所有行。

-------

命令:

msck repair table squadre_part 

(插入命令后…(没有解决问题。

提前感谢您的回复。

莫雷诺

有些行可能会丢失,因为托管表DDL中有TBLPROPERTIES ("skip.header.line.count"="1"),而实际上在INSERT过程中没有创建头。然后,每个文件中的一行将丢失。如果有许多文件,那么将丢失许多行。从托管表中删除该属性。

如果要使用LOAD命令或直接将带标头的文件放入表位置来加载带标头文件,请使用skip.header.line.count属性。

相关内容

  • 没有找到相关文章

最新更新