蜂巢中的多余空行

时间:2018-07-24 07:26:03

标签: csv hadoop hive hql cloudera-cdh

我的项目涉及将数据从SQL数据库迁移到HDFS,然后创建将数据文件链接到表的Hive表。我通过将数据库内容导出到本地计算机上的CSV文件来手动进行迁移,我正在使用winSCP将这些内容复制到hadoop edgenode上。在那里,我正在运行以下命令:

hadoop fs -mkdir /user/cloudera/project/database/table

之后

hadoop fs -put /home/cloudera/project/table.csv /user/cloudera/project/database/table/table.csv

最后,我正在运行一个从同一shell脚本文件调用的hql脚本:

CREATE TABLE IF NOT EXISTS TABLE_NAME 
(
    FIELD_ONE STRING, 
    FIELD_TWO INT,
    ETC STRING
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE
LOCATION '/user/cloudera/project/database/table'
tblproperties ("skip.header.line.count"="1");

出现的问题是,HDFS中的行比开始的SQL数据库多了70行。我怀疑此问题的原因是某些行被截断了(该行的其余部分被放到了下一行)。这会导致额外的行中的数据完全错误。

什么可能导致此问题,并且有解决方法?

2 个答案:

答案 0 :(得分:0)

问题是由于csv文件中多余的空白新行所致。在任何编辑器中(例如,vi table.csv)编辑CSV文件,并在数据结尾后删除空白行。

带有CSV空行的配置单元表:

United States Barbados 130 United States Qatar 109 Australia United States 329 Australia India 310 NULL NULL NULL NULL

删除CSV中的空白行后的配置单元表:

United States Barbados 130 United States Qatar 109 Australia United States 329 Australia India 310

最好的方法是使用“ Sqoop”将数据从SQL数据库导入到Hive。 sqoop将处理模式,您也可以增量加载数据。 请参阅:https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_importing_data_into_hive

答案 1 :(得分:0)

似乎与您要使用哪个数据库导入数据有关?如果您使用的是DB2数据库,则下面的参数将解决您的问题。

sqoop import -D db2.jcc.charsetDecoderEncoder=3