索引超出范围:JDBC SqlServer异常

时间:2017-06-29 15:10:35

标签: sql-server linux hadoop jdbc sqoop

我正在使用Sqoop将数据从SQL服务器导入到本地HDFS。我正在使用一个简单的自由格式查询从表中拉出大约10行。下面是我从终端执行的sqoop命令:

sqoop import --connect 'jdbc:sqlserver://xx.xx.xx.xx;username=xx;password=xxxxx;database=DBName' --query "SELECT top 10 OrderID from DJShopcart_OrderItems where \$CONDITIONS"  --split-by "OrderID" --target-dir  /work/gearpurchase

当我从本地计算机执行此操作时,出现以下异常:

  

引起:com.microsoft.sqlserver.jdbc.SQLServerException:索引   2超出范围。在   com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)     在   com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyValidColumnIndex(SQLServerResultSet.java:543)     在   com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2066)     在   com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2099)     在   com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2084)     在   com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2327)     在   org.apache.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:52)     在   com.cloudera.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:53)     在QueryResult.readFields(QueryResult.java:105)at   org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:244)

如果我导入2列,则异常表示索引3超出范围。

我还检查了SQLServerResultSet类文档,了解可能是异常的原因但没有用。只有与客户端游标与服务器端游标

等概念相混淆

无论我尝试什么,我都无法通过这种简单的自由格式查询从SQL服务器导入数据。

Sqoop version : 1.4.6 
Hadoop : 2.7.3
Machine : Ubuntu 16.04

请帮帮我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

如果我导入2列,则异常表示索引3超出范围。

然后故障在于SQOOP。

at org.apache.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:52)

因为它将3作为参数传递给

at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2327)

当结果只包含2列时,有效列索引为1和2。