hive将数据从csv导入表中不正确的列

vd8tlhqk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(516)

下面是我的表格创建和我的csv示例;

DROP TABLE IF EXISTS xxx.fbp;
CREATE TABLE IF NOT EXISTS xxx.fbp (id bigint, p_name string, h_name string, ufi int, city string, country string)
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE;

74905,,xyz,-5420642,法国城市一号
74993,,zyx,-874432,德国城市
75729,,yzx,-1284248,城市二长名,法国
然后使用以下查询将数据加载到配置单元表中:

LOAD DATA
    INPATH '/user/xxx/hdfs_import/fbp.csv'
    INTO TABLE xxx.fbp;

似乎有数据从表的第5列泄漏到第6列。所以,我在我的国家专栏里看到了城市数据。

SELECT country, count(country) from xxx.fbp group by country
+---------+------+
| country | _c1  |
| Germany | 1143 |
| City    |   1  |
+---------+------+

我不知道为什么城市数据偶尔会被导入国家栏。csv是从googlesheets下载的,我已经删除了标题。

enyaitl3

enyaitl31#

问题出在csv本身。包含一些列,例如p.name , 在几个领域。这将导致行结束时间比预期的要早。我必须清理数据并删除所有 , . 之后,它正确导入。很快就完成了python。

with open("fbp.csv") as infile, open("outfile.csv", "w") as outfile:
    for line in infile:
        outfile.write(line.replace(",", ""))
ctrmrzij

ctrmrzij2#

原因可能是您的行终止不是'\n',基于windows的工具添加了额外的字符,这会造成问题。也可能是您使用列分隔符创建了feild。
解决方案:1。试着打印一行有'where country=city'子句的问题,这会让你知道hive是如何创建记录的。2尝试二进制存储格式以100%确定配置单元处理的数据。
希望有帮助。

相关问题