[ https://issues.apache.org/jira/browse/SQOOP-2564?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mirek Szymanski updated SQOOP-2564: ----------------------------------- Environment: Teradata 13, Oracle 11g > Problem with Teradata input table with INTEGER and FLOAT columns > ---------------------------------------------------------------- > > Key: SQOOP-2564 > URL: https://issues.apache.org/jira/browse/SQOOP-2564 > Project: Sqoop > Issue Type: Bug > Affects Versions: 1.99.6 > Environment: Teradata 13, Oracle 11g > Reporter: Mirek Szymanski > > I'm trying to transfer data between Teradata and Oracle databases. > If the input table in Teradata has column of type INTEGER (columntype 'I' in > dbc.columnsV) or FLOAT (columntype 'F') to Oracle table - exception is thrown > "org.apache.sqoop.common.SqoopException: MAPRED_EXEC_0017:Error occurs during > extractor run" > Exception in case of FLOAT column: > 2015-09-14 10:59:09,200 INFO [AsyncDispatcher event handler] > org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics > report from attempt_1441804561641_0239_m_000001_0: Error: > org.apache.sqoop.common.SqoopException: MAPRED_EXEC_0017:Error occurs during > extractor run > at org.apache.sqoop.job.mr.SqoopMapper.run(SqoopMapper.java:99) > 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:415) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628) > at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) > Caused by: java.lang.ClassCastException: java.lang.Double cannot be cast to > java.lang.Float > at > org.apache.sqoop.connector.common.SqoopIDFUtils.toCSVFloatingPoint(SqoopIDFUtils.java:164) > at > org.apache.sqoop.connector.common.SqoopIDFUtils.toCSV(SqoopIDFUtils.java:606) > at > org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.toCSV(CSVIntermediateDataFormat.java:116) > at > org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.setObjectData(CSVIntermediateDataFormat.java:87) > at > org.apache.sqoop.job.mr.SqoopMapper$SqoopMapDataWriter.writeArrayRecord(SqoopMapper.java:125) > at > org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract(GenericJdbcExtractor.java:91) > at > org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract(GenericJdbcExtractor.java:38) > at org.apache.sqoop.job.mr.SqoopMapper.run(SqoopMapper.java:95) > ... 7 more > In case of INTEGER column: > ... > java.lang.ClassCastException: java.lang.Integer cannot be cast to > java.math.BigDecimal > at > org.apache.sqoop.connector.common.SqoopIDFUtils.toCSVDecimal(SqoopIDFUtils.java:176) > at > org.apache.sqoop.connector.common.SqoopIDFUtils.toCSV(SqoopIDFUtils.java:602) > at > org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.toCSV(CSVIntermediateDataFormat.java:116) > at > org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.setObjectData(CSVIntermediateDataFormat.java:87) > at > org.apache.sqoop.job.mr.SqoopMapper$SqoopMapDataWriter.writeContent(SqoopMapper.java:149) > ... 11 more > The fix (or maybe a workaround) is to remove the cast to BigDecimal from > SqoopIDFUtils.toCSVDecimal(). When the cast is removed, my scenario works > fine. > I wonder if the casts are necessary in toCSVFloatingPoint and toCSVDecimal > methods. What is the real purpose of them - some kind of type checking? > If this is type checking - why don't use something more explicit, like > instanceof()? -- This message was sent by Atlassian JIRA (v6.3.4#6332)