2017-06-29 314 views
0

SQLサーバからローカルHDFSにデータをインポートするのにSqoopを使用しています。私は簡単なフリーフォームのクエリを使用してテーブルから約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ました。 com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(のSQLServerResultSetでjdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2066) でcom.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2099) 。 java:2084) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2327) at org.apa QueryResult.readFieldsでche.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:52) でcom.cloudera.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWritableBridge.java:53) (QueryResult.java:105)で私は2列をインポートする場合 org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:244)

、例外はインデックス3が範囲外であると言います。

私は例外の原因になる可能性があるものを理解するために、クラス文書もSQLServerResultSetで確認しましたが、使用しません。クライアントサイドカーソルとサーバーサイドカーソルのコンセプトだけが混乱している

私が試しても、SQLサーバーからデータをインポートするためのこの単純なフリーフォームのクエリを取得することはできません。

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) 

結果がわずか2列が含まれ、かつ有効な列インデックスが1と2

あるとき、それは

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

の引数として3を渡していたよう

関連する問題