索引超出范围:jdbc sql server异常

tf7tbtn2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(425)

我使用sqoop将数据从sqlserver导入本地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)在org.apache.sqoop.mapreduce.db.dbrecordreader.nextkeyvalue(dbrecordreader。java:244)
如果我导入2列,异常会显示索引3超出范围。
我还查看了sqlserverresultset类文档,以了解导致异常但没有用的原因。只是对客户端游标和服务器端游标这样的概念比较困惑
无论我尝试什么,我都无法使用这个简单的自由形式查询从SQLServer导入数据。

Sqoop version : 1.4.6 
Hadoop : 2.7.3
Machine : Ubuntu 16.04

请帮帮我。提前谢谢。

xvw2m8pv

xvw2m8pv1#

如果我导入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。

相关问题