【发布时间】:2019-07-29 10:22:03
【问题描述】:
我必须使用 sqoop 导入数据,我的源列名称之间有空格,所以当我在 --map-column-java 参数中添加它时出现错误。
Sqoop 导入示例:
sqoop import --connect jdbc-con --username "user1" --query "select * from table where \$CONDITIONS" --target-dir /target/path/ -m 1 --map-column-java data col1=String, data col2=String, data col3=String --as-avrodatafile
列名:
data col1,
data col2,
data col3
错误:
19/03/07 07:31:55 调试 sqoop.Sqoop:格式错误的映射。列映射应该是 key=value[,key=value]* 的形式 java.lang.IllegalArgumentException:格式错误的映射。列映射应该是 key=value[,key=value]* 的形式 在 org.apache.sqoop.SqoopOptions.parseColumnMapping(SqoopOptions.java:1355) 在 org.apache.sqoop.SqoopOptions.setMapColumnJava(SqoopOptions.java:1375) 在 org.apache.sqoop.tool.BaseSqoopTool.applyCodeGenOptions(BaseSqoopTool.java:1363) 在 org.apache.sqoop.tool.ImportTool.applyOptions(ImportTool.java:1011) 在 org.apache.sqoop.tool.SqoopTool.parseArguments(SqoopTool.java:435) 在 org.apache.sqoop.Sqoop.run(Sqoop.java:135) 在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 在 org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) 在 org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) 在 org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) 在 org.apache.sqoop.Sqoop.main(Sqoop.java:252) 格式错误的映射。列映射的形式应该是 key=value[,key=value]*
【问题讨论】:
-
这个答案会对你有所帮助。 sqoop issue with space column name
-
我尝试通过传递
data col得到 col not found 错误。 -
尝试如下: sqoop import --connect jdbc-con --username "user1" --query "select * from table where \$CONDITIONS" --target-dir /target/path/ - m 1 --map-column-java "datacol1=String, datacol2=String, datacol3=String"--as-avrodatafile 出现错误:ERROR tool.ImportTool: Import failed: Cannot convert SQL type 2005
-
尝试传递 --map-column-java 中的所有列,仍然抛出错误:ERROR tool.ImportTool: Import failed: Cannot convert SQL type 2005
-
我们有 3 列类型为 2005:找到类型为 [2005, 2147483647, 0] 的 COLNAME。我看到 SQL 服务器中该 COL 的数据类型是 nvarchar,max_length = -1 所以我尝试在这些 col 上使用 map-col-java 将它们转换为字符串。仍然出现同样的错误。