我使用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
请帮帮我。提前谢谢。
1条答案
按热度按时间xvw2m8pv1#
如果我导入2列,异常会显示索引3超出范围。
那么问题就出在sqoop上了。
因为它把3作为一个参数传递给
当结果仅包含2列时,有效列索引为1和2。