分隔符设置不正确,要么导致hive表中行数过多要么导致所有数据到hive后都集中到一列中。在sqoop侧和hive侧都设置正确,数据从其他数据库到hive库后数据总量的准确性才能得到保证。
在sqoop侧,拼装OptionsFileUtil. expandArguments(String[] args)函数的参数时,需要往其接收的数组中指定如下两个重要信息:
"--fields-terminated-by", "\001",
"--hive-drop-import-delims",
其中"–fields-terminated-by", "\001"含义为列分隔符指定为一个隐藏的字符,所谓隐藏是指该字符无法从键盘直接输入;
"–hive-drop-import-delims"是指丢弃hive默认的分隔符;
在hive侧
//设置hive库的分隔符
String serdeSql = "alter table " + tableName + " set serdeproperties('field.delim'='\001', 'serialization.format'='\001')";
serialization.format是指定数据文件序列化时表中两个列字段之间的文件中的字段分隔符
以上组合抽取数据时数据准确性得到了保证。