Hive - select 中来自托管分区 table 的不完整行
Hive - incomplete rows in select from managed partitioned table
我需要将数据从 CSV 文件复制到 Hive 中的托管分区 table。
CSV 文件行是:
id,nome,cognome,ruolo
16,Mike,Maignan,Portiere
23,Fikayo,Tomori,Centrale
24,Simon,Kjaer,Centrale
19,Theo,Hernandez,Terzino
...
------
我在 ruolo
列上创建了一个托管分区 table。
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") ;
------
然后我创建了一个外部 table 以从 CSV 文件加载数据(然后我将 select 来自外部 table 的数据并将它们复制到托管分区 table 中)
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") ;
------
首先我设置了这两个属性:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
--------
当我将 CSV 文件放入 /ulisse/prove/external/HDFS 目录并从外部 table 执行 select 时,我看到了所有行。
------
从外部table“复制”到托管table后:
insert into squadre_part partition (ruolo) select * from external_squadre;
我看到托管 table 只有几行 (???)。
奇怪的是在HDSF中,在/user/hive/warehouse/<mydb>/<managed table>/...
下
我看到了所有子目录(和子目录中的文本文件),以及原始 CSV 文件的所有行。
------
命令:
msck repair table squadre_part
(插入命令后...)没有解决问题。
提前感谢您的回复。
莫雷诺
某些行可能会丢失,因为您在托管 table DDL 中有 TBLPROPERTIES ("skip.header.line.count"="1")
,而实际上在 INSERT 期间没有创建 headers。然后每个文件中的一行将丢失。如果有很多文件,那么很多行都会丢失。从托管 table.
中删除 属性
如果您使用 headers 使用 LOAD 命令加载文件或直接将 headers 的文件放入 table 位置,请使用 skip.header.line.count
属性。
我需要将数据从 CSV 文件复制到 Hive 中的托管分区 table。
CSV 文件行是:
id,nome,cognome,ruolo
16,Mike,Maignan,Portiere
23,Fikayo,Tomori,Centrale
24,Simon,Kjaer,Centrale
19,Theo,Hernandez,Terzino
...
------
我在 ruolo
列上创建了一个托管分区 table。
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") ;
------
然后我创建了一个外部 table 以从 CSV 文件加载数据(然后我将 select 来自外部 table 的数据并将它们复制到托管分区 table 中)
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") ;
------
首先我设置了这两个属性:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
--------
当我将 CSV 文件放入 /ulisse/prove/external/HDFS 目录并从外部 table 执行 select 时,我看到了所有行。
------
从外部table“复制”到托管table后:
insert into squadre_part partition (ruolo) select * from external_squadre;
我看到托管 table 只有几行 (???)。
奇怪的是在HDSF中,在/user/hive/warehouse/<mydb>/<managed table>/...
我看到了所有子目录(和子目录中的文本文件),以及原始 CSV 文件的所有行。
------
命令:
msck repair table squadre_part
(插入命令后...)没有解决问题。
提前感谢您的回复。
莫雷诺
某些行可能会丢失,因为您在托管 table DDL 中有 TBLPROPERTIES ("skip.header.line.count"="1")
,而实际上在 INSERT 期间没有创建 headers。然后每个文件中的一行将丢失。如果有很多文件,那么很多行都会丢失。从托管 table.
如果您使用 headers 使用 LOAD 命令加载文件或直接将 headers 的文件放入 table 位置,请使用 skip.header.line.count
属性。