You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sqoop.apache.org by "Mirek Szymanski (JIRA)" <ji...@apache.org> on 2015/09/11 14:11:45 UTC

[jira] [Updated] (SQOOP-2564) Problem with Teradata input table with INTEGER and FLOAT columns

     [ 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)