Windows下Sqoop中关于分隔符的问题

背景

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权威指南》里面的代码或命令不一定直接能用,很多甚至是大坑,还是得根据实际情况进行修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值