我使用SQLServer导出的文件作为配置单元表(有40列)的输入。数据文件中约有600万行,但当我将该文件加载到配置单元表中时,发现记录数大于文件中的行数。该表比输入文本文件多15条记录。我怀疑有新行字符 \n 但由于数据量巨大,我无法手动检查并从数据文件中删除这些字符。有什么方法可以使我的表计数与文件计数完全相等吗?我是否可以进行加载查询以将这些新行字符视为数据而不是记录分隔符?还是有其他问题?
\n
wlsrxk511#
如果您正在将输入sqooping到hdfs/hive,那么您可以使用 --hive-drop-import-delims 或者 --hive-delims-replacement sqoop的选项。如果数据库的行包含字符串字段,而这些字符串字段中存在配置单元的默认行分隔符(\n和\r字符)或列分隔符(\01字符),则配置单元在使用sqoop导入的数据时将出现问题。您可以使用--hive drop import delims选项在导入时删除这些字符,以提供与配置单元兼容的文本数据。或者,可以使用--hive delims replacement选项在导入时用用户定义的字符串替换>这些字符,以提供与配置单元兼容的文本数据。只有在使用配置单元的默认分隔符时才应使用这些选项,而在指定不同的分隔符时不应使用这些选项。sqoop用户指南或者,如果您使用其他方法将文件复制到hdfs上,那么只需对文件运行replace脚本/命令。
--hive-drop-import-delims
--hive-delims-replacement
4ioopgfo2#
只需运行一个简单的unix命令并清除源数据。sed-i's/\r//g'在数据集上应用此命令以删除carraige返回之后,我能够加载具有预期记录计数的配置单元表。
2条答案
按热度按时间wlsrxk511#
如果您正在将输入sqooping到hdfs/hive,那么您可以使用
--hive-drop-import-delims
或者--hive-delims-replacement
sqoop的选项。如果数据库的行包含字符串字段,而这些字符串字段中存在配置单元的默认行分隔符(\n和\r字符)或列分隔符(\01字符),则配置单元在使用sqoop导入的数据时将出现问题。
您可以使用--hive drop import delims选项在导入时删除这些字符,以提供与配置单元兼容的文本数据。
或者,可以使用--hive delims replacement选项在导入时用用户定义的字符串替换>这些字符,以提供与配置单元兼容的文本数据。
只有在使用配置单元的默认分隔符时才应使用这些选项,而在指定不同的分隔符时不应使用这些选项。
sqoop用户指南
或者,如果您使用其他方法将文件复制到hdfs上,那么只需对文件运行replace脚本/命令。
4ioopgfo2#
只需运行一个简单的unix命令并清除源数据。
sed-i's/\r//g'
在数据集上应用此命令以删除carraige返回之后,我能够加载具有预期记录计数的配置单元表。