sqoop 导入时发生错误“将 varchar 值转换为 JDBC 数据类型 DECIMAL”

发布于 2024-12-20 16:12:39 字数 3012 浏览 2 评论 0原文

场景:

当我输入 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美羊羊 2024-12-27 16:12:39

您的 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.

孤独陪着我 2024-12-27 16:12:39

这可能是因为您试图将 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文