我正在尝试使用sqoop将数据从hdfs文本文件导出到sqlserver。当我有多行要插入时,它会引发以下异常:
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
我检查了数据是否不一致,没有发现任何奇怪的地方。
我想知道司机是否得到支持?
1条答案
按热度按时间00jrzges1#
问题是由sqoop/jtds使用逗号分隔的值列表将多个insert语句分组到1中的默认方式引起的。这种方法与SQLServer2005不兼容。为了解决这个问题,我通过提供
--batch
参数。SQLServer2008支持sqoop/jtds将多个insert语句分组到1中的默认方式。
另外,当我使用mssql驱动程序尝试同样的事情(没有--batch参数)时,一切都正常。不确定mssqldriver和sqoop如何协同工作以确保与sqlserver2005兼容。