Hadoop 如何将带有空格的列名传递给sqoop——映射列java

Hadoop 如何将带有空格的列名传递给sqoop——映射列java,hadoop,sqoop,avro,Hadoop,Sqoop,Avro,我必须使用sqoop导入数据,我的源列名之间有空格,所以当我在--map column java参数中添加它时,会得到错误 示例Sqoop导入: data col1, data col2, data col3 sqoop导入--连接jdbc con--用户名“user1”--查询“select*from table where\$CONDITIONS”--target dir/target/path/-m1--映射列java data col1=String,data col2=String,

我必须使用sqoop导入数据,我的源列名之间有空格,所以当我在
--map column java
参数中添加它时,会得到错误

示例Sqoop导入:

data col1,
data col2,
data col3
sqoop导入--连接jdbc con--用户名“user1”--查询“select*from table where\$CONDITIONS”--target dir/target/path/-m1--映射列java data col1=String,data col2=String,data col3=String--作为avrodatafile

列名:

data col1,
data col2,
data col3
错误:

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]*


能够解决此问题:

1。空格问题: sqoop导入--连接jdbc con--用户名“user1”--查询“select*from table where\$CONDITIONS”--target dir/target/path/-m1--映射列java“data col1=String,data col2=String,data col3=String”--作为avrodatafile

2。错误工具。导入工具:导入失败:无法转换SQL类型2005: 源代码中有3列包含2005,nvarchar将它们添加到了—映射列java解决了这个问题

3。org.apache.avro.file.DataFileWriter$AppendWriteException:org.apache.avro.unsolvedUnionException:不在联合中[“null”,“long”]:1****

这是由于在select查询中使用*导致的,因此将sqoop查询修改为:


sqoop导入——连接jdbc con——用户名“user1”——查询“从\$CONDITIONS所在的表中选择[col1,data col2,data col3]——target dir/target/path/-m1——映射列java“data col1=String,data col2=String,data col3=String”——作为avrodatafile

这个答案将帮助您。我通过传递
data col
getting col not found error尝试了这一点。尝试如下:sqoop import--connect jdbc con--username“user1”--query“select*from table where\$CONDITIONS”--target dir/target/path/-m1--map列java“datacol1=String,datacol2=String,datacol3=String”--作为avrodatafile获取错误:错误工具。导入工具:导入失败:无法转换SQL类型2005尝试在--map column java中传递所有列,仍引发错误:错误工具。导入工具:导入失败:无法转换SQL类型2005我们有3列类型为2005:找到类型为[2005,2147483647,0]的COLNAME。我看到SQL server中该列的数据类型是nvarchar,max_length=-1,因此我尝试在这些列上使用map COL java将它们转换为字符串。仍然得到相同的错误。