下面是我的表创建和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,xxx,xyz,-5420642,City One,France
74993,xxx,zyx,-874432,城市,德国
75729,xxx,yzx,-1284248,法国第二城市长名
然后我使用以下查询将数据加载到配置单元表中:
LOAD DATA
INPATH '/user/xxx/hdfs_import/fbp.csv'
INTO TABLE xxx.fbp;
似乎有数据从第5个csv“列”泄漏到表的第6列。因此,我在“国家/地区”列中看到城市数据。
SELECT country, count(country) from xxx.fbp group by country
+---------+------+
| country | _c1 |
| Germany | 1143 |
| City | 1 |
+---------+------+
我不确定为什么偶尔将城市数据导入“国家/地区”列。该csv是从Google表格下载的,并且我已经删除了标题。
答案 0 :(得分:0)
原因可能是您的行终止不是'\ n',基于Windows的工具添加了其他字符,这会引起问题。也可能是您使用列分隔符创建了该字段。
解决方案: 1.尝试通过“ where country = City”子句发出问题的打印行,这将使您了解Hive如何创建记录。 2.尝试二进制存储格式,以确保100%由Hive处理的数据。
希望有帮助。
答案 1 :(得分:0)
问题出在CSV本身内。有些列(例如p.name)在多个字段中包含,
。这将导致行结束比预期的早。我必须清理数据并删除所有,
。之后,它可以正确导入。使用python快速完成。
with open("fbp.csv") as infile, open("outfile.csv", "w") as outfile:
for line in infile:
outfile.write(line.replace(",", ""))