FAQ-sqoop --columns参数问题排查

问题描述/异常栈
sqoop会使用–columns去匹配列 Sqoop的export的执行思路为: 将HDFS文件按照指定的分隔符进行分隔 拼接insert into tableName (columna, columnb, ...) values (HDFS分隔的结果) 举例来说,如果HDFS文件是: 1,aaron,100 2,coco,200 mysql表test结构是: em_id,em_name,em_salary 3个字段 这时候sqoop会拼接成: insert into test (em_id,em_name,em_salary) values (1,'aaron',100),(2,'coco',200); 注意这里的列名是数据库中的列不是hive中的 DDB或者MySQL中首字段是自增id 按照上面的示例,如果MySQL表字段为id, em_id, em_name, em_salary,此时sqoop拼接的默认SQL是:insert into test (id, em_id, em_name, em_salary) values (1,'aaron',100),(2,'coco',200); 这时候MySQL就报错了。 此时可以通过–columns 来解决,–columns "em_id,em_name,em_salary" 这样指定后,就会替换insert into test 后面的字段,变成insert into test (em_id,em_name,em_salary) values (1,'aaron',100),(2,'coco',200);
解决方案

在更多参数中添加参数 - -verbose FAQ-sqoop --columns参数说明 - 图1 FAQ-sqoop --columns参数说明 - 图2 FAQ-sqoop --columns参数说明 - 图3

作者:焦巍