将文本数据加载到表中时配置单元未正确处理整数值

hlswsv35  于 2022-09-27  发布在  Hive
关注(0)|答案(1)|浏览(169)

我正在将一些文本数据加载到包含int列的Apache Hive中。它将空值存储在意外位置。因此,我进行了一些测试:

create table testdata (c1 INT, c2 FLOAT) row format delimited fields terminated by ',' stored as textfile;
load data local inpath "testdata.csv" overwrite into table testdata;
select * from testdata;

测试数据。csv包含以下数据:

1,1.0
 1, 1.0
1 ,1.0
 1 , 1.0

如您所见,数据集在数字周围包含一些额外的空白。但这会导致hive在整数列中存储空值,而float被正确解析。
选择查询输出:
为什么会发生这种情况,以及如何正确处理这些情况?

klsxnrf1

klsxnrf11#

你不能一步到位。首先将数据作为字符串加载到stg表中,然后通过删除空格从stg表加载到最终表中。
1.创建并加载如下表。

create table testdata (c1 string, c2 string) row format delimited fields terminated by ',' stored as textfile;
create table stgtestdata as select * from testdata;
load data local inpath "testdata.csv" overwrite into table stgtestdata;

1.使用镶块通过裁剪空间加载到最终表中,并按如下方式正确转换

Insert overwrite testdata
select 
Cast(trim(c1) as int) as c1,
Cast(trim(c2) as float) as c2
from stgtestdata;

相关问题