我正在尝试使用sqoop将数据从hdfs文本文件导出到SQL Server。如果我要插入多行,则抛出以下异常:
java.io.IOException: java.sql.SQLException: Incorrect syntax near ','.
at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.close(AsyncSqlRecordWriter.java:192)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.close(MapTask.java:567)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:675)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.sql.SQLException: Incorrect syntax near ','.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResul
我已经检查了数据的不一致性,我找不到任何奇怪的东西。
我想知道驱动程序是否支持?
答案 0 :(得分:1)
问题是由于默认方式sqoop / jtds使用逗号分隔的值列表将多个insert语句分组为1。这种方法与sqlserver 2005不兼容。为了解决这个问题,我通过提供--batch
参数启用了jdbc-batch插入。
sqlserver 2008支持sqoop / jtds将多个insert语句组合为1的默认方式。
另外,当我使用ms-sql驱动程序尝试相同的事情(没有--batch参数)时一切正常。不确定ms-sql-driver和sqoop如何协同工作以确保与sql server 2005的兼容性。