Sqoop遇到问题汇总

MySQL数据导入Hive时数值类型全部为null

mysql通过sqoop导入到hive表中,发现有个别数据类型为inttinyint的列导入后数据为null。设置各种行分隔符,列分隔符都没有效果

解决方法

尝试一:

hive中单独将有问题的那几列的数据类型设置为string类型,重新导入后发现,里面的值变成true或者false。

尝试二:

由此猜想,sqoop在导入的时候,将那几列的数据转换成了boo类型,问题产生的原因和hive建表语句无关,只能发生在sqoop端或者mysql端。

经过查看,发现mysql中有问题的那几列数据类型都是tinyint(1),这说明什么,说明那几列的数值长度为1。猜想sqoop将数值长度为1的数据类型,认为是boo类型,导入的时候会自动转换成boo类型

1
2
3
4
# mysql建表语句 截取type字段
EATE TABLE `student` (
`type` tinyint(1)
) ENGINE=InnoDB ;

解决方案

在sqoop的导入sql语句中,单独对那几个问题列进行数据类型转换(CONVERT(match_type,SIGNED)),然后再导入hive,发现数据可以正常显示

1
select CONVERT(type,SIGNED) from student;

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!