【问题标题】:Extra Null Rows in HiveHive 中的额外空行
【发布时间】:2018-07-24 07:26:03
【问题描述】:

我的项目涉及将数据从 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 行。我怀疑这个问题的原因是某些行被截断(行的剩余部分被带到下一行)。这会导致额外的行包含完全错误的数据。

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

【问题讨论】:

    标签: csv hadoop hive hql cloudera-cdh


    【解决方案1】:

    问题是由于 csv 文件中有额外的空白新行。在任何编辑器中编辑 CSV 文件(例如:vi table.csv)并删除数据末尾的空行。

    CSV 中带有空行的 Hive 表:

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

    删除 CSV 中的空行后的 Hive 表:

    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

    【讨论】:

    • 我会试试这个!但是,并非 Hive 中的所有额外行都是 NULL。有些也有不正确的信息。
    • 当然,如果问题仍未解决,您也可以在表定义中添加 LINES TERMINATED BY '\n' 子句。
    【解决方案2】:

    好像和你使用哪个数据库导入数据有关?如果您使用的是 DB2 数据库,那么下面的参数将解决您的问题。

    sqoop import -D db2.jcc.charsetDecoderEncoder=3 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2020-02-05
      • 2016-08-06
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多