csv - Hive从CSV导入数据到表中的错误列

标签 csv hadoop hive

下面是我的表创建和来自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,City,Germany

75729,xxx,yzx,-1284248,City Two Long Name,France


然后,使用以下查询将数据加载到配置单元表中:
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表格下载的,并且我已经删除了标题。

最佳答案

原因可能是您的行终止不是'\ n',基于Windows的工具添加了其他字符,这会引起问题。也可能是您使用创建列分隔符的字段。

解:
1.尝试通过“where country = City”子句发出问题的打印行,这将使您了解Hive如何创建记录。
2.尝试二进制存储格式以确保100%由Hive处理的数据。

希望能帮助到你。

关于csv - Hive从CSV导入数据到表中的错误列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56005954/

相关文章:

bash - 在特定数量的分隔符后添加 '\n'

c++ - 数数在csv中的csv文件中的单词

python - 以文本文件和 oracle 表为源的 Hive、Pig 或 Python Mapreduce 哪个能提供最佳性能?

java - 让用户运行 HIVE 作业?

csv - MysqlDump 为 CSV 格式。 (封闭的字符串字段,第一个描述行,没有 sql 文件)

python - 两个列表中对应的float

hadoop - 工作跟踪器的未知协议(protocol)

hadoop - MapR 客户端不执行 hadoop - Windows

mysql - Sqoop - 如果使用 order by 和 limit 1,则导入最大值查询失败

hadoop - 从Hive与Druid互动时出错