sqoop 导入时发生错误“将 varchar 值转换为 JDBC 数据类型 DECIMAL”
场景:
当我输入 sqoop 导入查询时,我得到如下信息:
错误:
hadoop@ubuntu:~/sqoop-1.1.0/bin$ ./sqoop-import --driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver' --connect 'jdbc:sqlserver://192.168.xx.xx;database=HadoopTest;user=xxxxx;password=xxxxxx' --table PersonInfo1 --target-dir /data/PersonInfoData --check-column email --incremental append --compress11/12/10 15:52:50 INFO tool.CodeGenTool: Beginning code generation
11/12/10 15:52:50 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM PersonInfo1 AS t WHERE 1=0
11/12/10 15:52:50 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM PersonInfo1 AS t WHERE 1=0
11/12/10 15:52:51 INFO orm.CompilationManager: HADOOP_HOME is /home/hadoop/hadoop-0.21.0/bin/..
11/12/10 15:52:51 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/e8d9b5cc0800d8cde97f533f477a8ebd/PersonInfo1.jar
11/12/10 15:52:51 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while converting the varchar value to JDBC data type DECIMAL.
at com.cloudera.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:235)
at com.cloudera.sqoop.tool.ImportTool.importTable(ImportTool.java:345)
at com.cloudera.sqoop.tool.ImportTool.run(ImportTool.java:423)
at com.cloudera.sqoop.Sqoop.run(Sqoop.java:134)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:69)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:83)
at com.cloudera.sqoop.Sqoop.runSqoop(Sqoop.java:170)
at com.cloudera.sqoop.Sqoop.runTool(Sqoop.java:196)
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:205)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while converting the varchar value to JDBC data type DECIMAL.
at com.microsoft.sqlserver.jdbc.DDC.convertStreamToObject(DDC.java:473)
at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:2474)
at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:176)
at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBigDecimal(SQLServerResultSet.java:2596)
at com.cloudera.sqoop.tool.ImportTool.getMaxColumnId(ImportTool.java:187)
at com.cloudera.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:230)
... 8 more
Caused by: java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:459)
at java.math.BigDecimal.<init>(BigDecimal.java:728)
at com.microsoft.sqlserver.jdbc.DDC.convertStringToObject(DDC.java:285)
at com.microsoft.sqlserver.jdbc.DDC.convertStreamToObject(DDC.java:436)
... 16 more
问题:
为什么会发生这种情况?请建议我解决方案来删除它。
谢谢。
Scenario:
When I enter the sqoop import query I am getting as below:
Error:
hadoop@ubuntu:~/sqoop-1.1.0/bin$ ./sqoop-import --driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver' --connect 'jdbc:sqlserver://192.168.xx.xx;database=HadoopTest;user=xxxxx;password=xxxxxx' --table PersonInfo1 --target-dir /data/PersonInfoData --check-column email --incremental append --compress11/12/10 15:52:50 INFO tool.CodeGenTool: Beginning code generation
11/12/10 15:52:50 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM PersonInfo1 AS t WHERE 1=0
11/12/10 15:52:50 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM PersonInfo1 AS t WHERE 1=0
11/12/10 15:52:51 INFO orm.CompilationManager: HADOOP_HOME is /home/hadoop/hadoop-0.21.0/bin/..
11/12/10 15:52:51 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/e8d9b5cc0800d8cde97f533f477a8ebd/PersonInfo1.jar
11/12/10 15:52:51 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while converting the varchar value to JDBC data type DECIMAL.
at com.cloudera.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:235)
at com.cloudera.sqoop.tool.ImportTool.importTable(ImportTool.java:345)
at com.cloudera.sqoop.tool.ImportTool.run(ImportTool.java:423)
at com.cloudera.sqoop.Sqoop.run(Sqoop.java:134)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:69)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:83)
at com.cloudera.sqoop.Sqoop.runSqoop(Sqoop.java:170)
at com.cloudera.sqoop.Sqoop.runTool(Sqoop.java:196)
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:205)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: An error occurred while converting the varchar value to JDBC data type DECIMAL.
at com.microsoft.sqlserver.jdbc.DDC.convertStreamToObject(DDC.java:473)
at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:2474)
at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:176)
at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBigDecimal(SQLServerResultSet.java:2596)
at com.cloudera.sqoop.tool.ImportTool.getMaxColumnId(ImportTool.java:187)
at com.cloudera.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:230)
... 8 more
Caused by: java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:459)
at java.math.BigDecimal.<init>(BigDecimal.java:728)
at com.microsoft.sqlserver.jdbc.DDC.convertStringToObject(DDC.java:285)
at com.microsoft.sqlserver.jdbc.DDC.convertStreamToObject(DDC.java:436)
... 16 more
Question:
Why it is happening? Pls suggest me solution to remove this.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的 SQL Server 表中是否有一个定义为 varchar 的字段,但其中一些记录为数字。它可能会将数据类型分配给它决定的字段。
Do you have a field in your SQL Server table that is defined as varchar, but has some of the records as numbers. It may be assigning the data type to the field it decides you want.
这可能是因为您试图将 varchar 转换为浮点或十进制。
它的 DataType 问题检查数据库和 java 代码中的列数据类型。
Its might be because you trying to convert varchar into float or decimal.
Its DataType issue check your column datatype in database and in your java code.