表计数大于Hive中的文件记录计数

时间:2017-05-29 18:28:47

标签: hadoop hive cloudera impala

我正在使用SQL Server导出的文件作为我的hive表的输入(有40列)。数据文件中有大约600万行,但是当我在hive表中加载该文件时,我发现记录计数超过了文件中的行数。该表的记录多于输入文本文件的记录。

我怀疑数据中存在新的行字符\n,但由于数据量庞大,我无法手动检查并从数据文件中删除这些字符。

有什么方法可以管理我的表计数与文件计数完全相同?我可以将我的加载查询视为将这些新行字符视为数据而不是记录分隔符吗?或者还有其他问题吗?

2 个答案:

答案 0 :(得分:0)

如果你是对hdfs / hive的sqooping输入,那么你可以使用sqoop的--hive-drop-import-delims--hive-delims-replacement选项。

  

如果您的数据库使用,Hive将在使用Sqoop导入的数据时遇到问题   rows包含具有Hive默认行分隔符的字符串字段(\ n   和\ r字符)或列分隔符(\ 01字符)存在于   它们。
  您可以使用 - hive-drop-import-delims 选项删除它们   导入时的字符可以提供与Hive兼容的文本数据   或者,您可以使用 - hive-delims-replacement 选项替换>导入时带有用户定义字符串的那些字符   与Hive兼容的文本数据   这些选项只应在您使用时使用   使用Hive的默认分隔符,如果不同则不应使用   指定了分隔符。

     

Sqoop User Guide

或者,如果您使用其他方法将文件复制到hdfs,则只需对文件运行替换脚本/命令。

答案 1 :(得分:0)

只需运行简单的unix命令并清理源数据即可。

sed -i's / \ r // g'

在数据集上应用此命令以删除carraige返回后,我能够加载具有预期记录数的hive表。