Windows下Sqoop中关于分隔符的问题
程序员文章站
2022-05-25 23:46:21
...
背景
Sqoop是用来连接数据库和HDFS或hive的工具,由于表在数据库(以Mysql为例)和hive中的默认分隔符不同,因此如果不指定分隔符的话可能会导致很多问题,比如把Mysql中的数据导入到hive中,结果hive表里全是null,或者在把hdfs中数据文件导出到mysql中,发生异常导致export failed等。
按理说,使用sqoop的参数fields_terminated_by就可以解决这个问题,实则不然。
问题
在使用field_terminated_by参数时,如果直接把分隔符以字符串的形式传入,比如这样
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test -username root -password root --table sales --hive-table sales_test --fields-terminated-by ','
会报错,报错内容如下
Missing argument for option: fields-terminated-by
解决方法
我们要把,转换成八进制的unicode编码,然后去掉里面的u。
比如使用站长工具把,转换成unicode编码,得到的是\u002c,再用计算器把002c转换成八进制,得到0054,然后我们以\0054作为分隔符就没问题了。新的命令如下所示
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test -username root -password root --table sales --hive-table sales_test --fields-terminated-by '\0054'
结语
《Hadoop权威指南》里面的代码或命令不一定直接能用,很多甚至是大坑,还是得根据实际情况进行修改。
推荐阅读
-
关于windows下安装mysql数据库出现中文乱码的问题
-
关于Windows环境下hadoop的nodemanager无法启动的问题
-
富文本编辑器 - 关于symfony中读取web/bundles路径下php文件的问题
-
关于在window下python中安装MySQL遇到的问题及解决方法
-
Windows下Sqoop中关于分隔符的问题
-
关于从数据库中查询出的字符串显示在网页下是乱码的有关问题
-
关于从数据库中查询出的字符串显示在网页下是乱码的有关问题
-
关于windows下安装mysql数据库出现中文乱码的问题
-
windows下用navicat链接虚拟机MYSQL数据库过程中的问题
-
富文本编辑器 - 关于symfony中读取web/bundles路径下php文件的问题