我正在使用Sqoop使用JDBC-ODBC桥从SQL Server导入数据,其中ODBC桥连接到SQL Server。
sqoop eval工作正常。
然而,sqoop导入失败。
命令:
sqoop import --query "select * from table where \$CONDITIONS" --connect jdbc:odbc:test --driver sun.jdbc.odbc.JdbcOdbcDriver --connection-manager org.apache.sqoop.manager.GenericJdbcManager --target-dir /to/hdfs --split-by table_name
错误:
ERROR manager.SqlManager:执行语句时出错:java.sql.SQLException:[unixODBC] [Driver Manager]驱动程序不支持此功能 java.sql.SQLException:[unixODBC] [Driver Manager]驱动程序不支持此功能
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
at sun.jdbc.odbc.JdbcOdbc.SQLGetStmtOption(JdbcOdbc.java:4423)
at sun.jdbc.odbc.JdbcOdbcStatement.getStmtOption(JdbcOdbcStatement.java:1207)
at sun.jdbc.odbc.JdbcOdbcStatement.getMaxRows(JdbcOdbcStatement.java:641)
at sun.jdbc.odbc.JdbcOdbcStatement.setFetchSize(JdbcOdbcStatement.java:821)
在org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:740)
在org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:759)
在org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:269)
在org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:240)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForQuery(SqlManager.java:233)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:304)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1833)
在org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1645)
在org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
在org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
在org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
在org.apache.sqoop.Sqoop.run(Sqoop.java:143)
在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
在org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
在org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
在org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
在org.apache.sqoop.Sqoop.main(Sqoop.java:236)
答案 0 :(得分:0)
我最好的猜测是,由于某种原因,JDBC驱动程序sun.jdbc.odbc.JdbcOdbcDriver不接受Sqoop在传输数据时发出的自定义提取大小(方法setFetchSize())。您使用JDBC-ODBC桥并且不直接与Microsoft SQL服务器通信的任何原因?
您可以使用--fetch-size来查看某些非默认值是否有效。