You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@sqoop.apache.org by Ben Huntley <be...@gmail.com> on 2013/09/05 02:39:07 UTC

Escaping column names when using sqoop export to mysql

Hi,

I've run into an issue, but I wanted to verify with the sqoop users
mailing list.  We have an existing schema defined as:

CREATE TABLE `TableXXXXX` (
`RecordID` varchar(45) NOT NULL default '',
`City` varchar(40) NOT NULL default '',
`State` varchar(2) NOT NULL default '',
`Zip` varchar(5) NOT NULL default '',
`Zip-4` varchar(4) NOT NULL default '',
KEY `RecordID` (`RecordID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=2000000000


As you can see, column Zip-4 contains a special character, -, which
would need to be escaped before performing an insert.  Unfortunately,
when I run:

sqoop export --connect jdbc:mysql://build12.mycompany.com/DBXXXXX
--username sqoop_user --password sqoop_pwd --table TableXXXXX
--export-dir /user/ben/seq_out --input-escaped-by '\'
--input-fields-terminated-by '\t' --mysql-delimiters --verbose

The operation fails with exception:

java.io.IOException: Can't export data, please check task tracker logs
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:140)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
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:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.io.IOException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right s

I have checked the task tracker logs and mysql logs, and it appears
that the issue is that the INSERT statements are being created as
such:

INSERT INTO Bankruptcies (RecordID, City, State, Zip, Zip-4) VALUES
(Values are here), (More values are here);

It seems that the issue is that the column names are not being escaped
when they ought to be.  I've checked a number of possible parameters
and have not been able to force the escaping of column names.  Does
anyone know how to do this, or is it an open issue?

Thank you very much in advance,
Ben