通过数据比对,发现sqoop导入hive的数据与MySQL原始数据对应不上,表现为两点:
①查数据总数不对,MySQL的count(1) = 108120条数据,但是导入至hive发现只有108112条数据,数据发生了丢失。
②应查数据值不对,查询到某个字段,MySQL值中仅有1,2两种值,但是hive表中包含1,2,以及一串看不懂的数字。
经反复核对数据,发现问题症结,所以就将它记录下来了。
原因是导入的数据里面包含\t,\n等分隔符。
hive 默认的分隔符是\001 (^A),建表的时候用fields-terminated-by "\001"。
如果hive建表使用\t或者\001进行分隔字段,那么mysql数据库中的字段里面就不能包含该字符,否则就会到此分隔,从而导致数据不对。
如果,数据库里面已经存在这种数据,也可以设置参数。
--hive-drop-import-delims 导入hive时删除\n,\r,\001
--hive-delims-replacement ',' 导入到hive时用自定义的字符串进行替换掉 \n,\r,\001
解决。
本文探讨了在将MySQL数据导入Hive时遇到的问题,发现数据丢失和值错误源于分隔符。解决方法包括调整Hive的分隔符设置,如使用`--hive-drop-import-delims`删除特殊字符,或用自定义字符串替换。确保数据库中的特殊字符不会干扰数据迁移。

1789

被折叠的 条评论
为什么被折叠?



