[ 
https://issues.apache.org/jira/browse/SQOOP-3039?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Lin updated SQOOP-3039:
----------------------------
    Attachment: SQOOP-3039.patch

java.sql.Time does not support time in "hh:mm:ss.fffffffff" format, only 
"hh:mm:ss".

So I have created a customized Time class to support nano seconds and switched 
to use this class instead.

> Sqoop unable to export Time data "13:14:12.1234" into Time colum in RMDBS
> -------------------------------------------------------------------------
>
>                 Key: SQOOP-3039
>                 URL: https://issues.apache.org/jira/browse/SQOOP-3039
>             Project: Sqoop
>          Issue Type: Bug
>          Components: tools
>    Affects Versions: 1.4.6
>            Reporter: Eric Lin
>            Priority: Minor
>         Attachments: SQOOP-3039.patch
>
>
> 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)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to