使用sqoop把hive表数据导到mysql时因空值报错问题
在hdfs上查看hive内部表的数据,发现是使用\N来代表null值的,但是mysql只能识别null,无法识别\N,所以导入时会报以下错误:
Caused by:java.lang.RuntimeException: Can't parse input data: '\N'
这时可以通过以下方法解决:
1、使用sqoop命令
① 在sqoop导出语句增加--input-null-string '\\N' --input-null-non-string '\\N' 参数,把\N转化成空字符''。
2、对hive表的处理
① 建表时通过NULL DEFINED AS '' 声明hive底层使用空字符存储和标识空值。
② 通过alter table table_name SET SERDEPROPERTIES('serialization.null.format'= '') 语句修改hive底层存储和标识空值为空字符'',但是修改后需要删除数据后重新导入才能生效。
3、对导入hive表的数据进行处理
① insert into table hive1 select IFNULL(Null,0) from mysql_table;
② insert into table hive1 select CASE column WHEN Null THEN 0 END from mysql_table;
参考链接:https://blog.youkuaiyun.com/williamjame/article/details/78856836