2017-06-29 201 views
0

我正在使用Sqoop將數據從SQL服務器導入本地HDFS。我正在使用一個簡單的自由格式查詢來從表中拉出10行。下面是我從終端執行sqoop命令:索引超出範圍:JDBC SqlServer異常

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) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2327) at org.apa che.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:52) 在 com.cloudera.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:53) 在QueryResult.readFields(QueryResult.java:105)在 org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:244)

如果我導入2個欄,異常說索引3是超出範圍。

我也檢查了SQLServerResultSet類文檔,以瞭解可能是異常的原因,但沒有用。只有更多的困惑與客戶端遊標與服務器端光標的概念

無論我嘗試我不能得到這個簡單的自由格式查詢從SQL Server中導入數據。

Sqoop version : 1.4.6 
Hadoop : 2.7.3 
Machine : Ubuntu 16.04 

請幫我一把。提前致謝。

回答

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。