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

Mirek Szymanski updated SQOOP-2564:
-----------------------------------
    Description: 
I'm trying to transfer data between Teradata and Oracle databases.
The input table in Teradata has column of type INTEGER (columntype 'I' in 
dbc.columnsV) and FLOAT (columntype 'F') to Oracle table.

This results in exception (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.

Exception in case of FLOAT column:
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

I wonder if the casts are necessary in toCSVFloatingPoint and toCSVDecimal 
methods. What is the real purpose of them (some kind of type checking?)

  was:
I'm trying to transfer data between Teradata and Oracle databases.
The input table in Teradata has column of type INTEGER (columntype 'I' in 
dbc.columnsV) to Oracle table with column INTEGER.

This results in exception:

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.


        Summary: Problem with Teradata input table with INTEGER and FLOAT 
columns  (was: Problem with Teradata input table with INTEGER column)

> 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
>            Reporter: Mirek Szymanski
>
> I'm trying to transfer data between Teradata and Oracle databases.
> The input table in Teradata has column of type INTEGER (columntype 'I' in 
> dbc.columnsV) and FLOAT (columntype 'F') to Oracle table.
> This results in exception (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.
> Exception in case of FLOAT column:
> 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
> I wonder if the casts are necessary in toCSVFloatingPoint and toCSVDecimal 
> methods. What is the real purpose of them (some kind of type checking?)



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

Reply via email to