sqoop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eric Lin <eric....@cloudera.com>
Subject Review Request 60587: SQOOP-3039 - Sqoop unable to export Time data "13:14:12.1234" into Time colum in RMDBS
Date Mon, 03 Jul 2017 06:36:04 GMT

-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/60587/
-----------------------------------------------------------

Review request for Sqoop, Attila Szabo and Szabolcs Vasas.


Bugs: SQOOP-3039
    https://issues.apache.org/jira/browse/SQOOP-3039


Repository: sqoop-trunk


Description
-------

To re-produce:

Set up MySQL database with following schema:

{code}
CREATE TABLE `test` (
  `a` time(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
{code}

Store the following data in HDFS:

{code}
16:56:53.0999
16:56:54.1
16:56:53.0000
16:56:54.1230
{code}

run Sqoop export command to copy data from HDFS into MySQL:

{code}
qoop export --connect jdbc:mysql://<mysql-host>/test --username root --password password
--table test  -m 1 --driver com.mysql.jdbc.Driver  --export-dir /tmp/test
{code}

Command will fail with the following error:

{code}
java.lang.RuntimeException: Can't parse input data: '16:56:53.0999'
        at t5.__loadFromFields(t5.java:223)
        at t5.parse(t5.java:166)
        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:89)
        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
        at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.NumberFormatException: For input string: "53.0999"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:580)
        at java.lang.Integer.parseInt(Integer.java:615)
        at java.sql.Time.valueOf(Time.java:108)
        at t5.__loadFromFields(t5.java:215)
        ... 12 more
{code}

Looks like Sqoop uses java.sql.Time.valueOf function to convert "16:56:53.0999" to Time object,
however, this function only accepts Time in "hh:mm:ss" format:

https://docs.oracle.com/javase/7/docs/api/java/sql/Time.html#valueOf(java.lang.String)


Diffs
-----

  src/java/com/cloudera/sqoop/lib/JdbcWritableBridge.java 316547f 
  src/java/org/apache/sqoop/lib/JdbcWritableBridge.java afde585 
  src/java/org/apache/sqoop/manager/ConnManager.java 1811ce0 
  src/java/org/apache/sqoop/orm/ClassWriter.java cdb2364 
  src/java/org/apache/sqoop/orm/Time.java PRE-CREATION 
  src/test/org/apache/sqoop/orm/TestTime.java PRE-CREATION 


Diff: https://reviews.apache.org/r/60587/diff/1/


Testing
-------

Test cases + manual tests


Thanks,

Eric Lin


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message