[
https://issues.apache.org/jira/browse/SQOOP-2586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14909185#comment-14909185
]
lvchuanwen commented on SQOOP-2586:
-----------------------------------
Hi jarcec,
>From hdfs to oracle. HdfsExtractor extraction WithFractionNoTimeZone time type
>data, through CSV layer processing into LocalDateTime object. I think
>GenericJdbcLoader need to process DateTime and LocalDateTime .
{code:title=SqoopIDFUtils.java|borderStyle=solid}
public static Object toDateTime(String csvString, Column column) {
Object returnValue;
String dateTime = removeQuotes(csvString);
org.apache.sqoop.schema.type.DateTime col =
((org.apache.sqoop.schema.type.DateTime) column);
if (col.hasFraction() && col.hasTimezone()) {
// After calling withOffsetParsed method, a string
// '2004-06-09T10:20:30-08:00' will create a datetime with a zone of
// -08:00 (a fixed zone, with no daylight savings rules)
returnValue =
dtfWithFractionAndTimeZone.withOffsetParsed().parseDateTime(dateTime);
} else if (col.hasFraction() && !col.hasTimezone()) {
// we use local date time explicitly to not include the timezone
returnValue = dtfWithFractionNoTimeZone.parseLocalDateTime(dateTime);
} else if (col.hasTimezone()) {
returnValue =
dtfWithNoFractionWithTimeZone.withOffsetParsed().parseDateTime(dateTime);
} else {
// we use local date time explicitly to not include the timezone
returnValue = dtfWithNoFractionAndTimeZone.parseLocalDateTime(dateTime);
}
return returnValue;
}
{code}
thanks
> oracle DATE type error
> ----------------------
>
> Key: SQOOP-2586
> URL: https://issues.apache.org/jira/browse/SQOOP-2586
> Project: Sqoop
> Issue Type: Bug
> Components: connectors/generic
> Affects Versions: 1.99.6
> Reporter: lvchuanwen
> Fix For: 2.0.0
>
> Attachments: SQOOP-2586.patch
>
>
> Table :
> CREATE TABLE "SYSTEM"."POC_OBJECTS_2" (
> "OWNER" VARCHAR2(128) NULL,
> "OBJECT_NAME" VARCHAR2(128) NULL,
> "SUBOBJECT_NAME" VARCHAR2(128) NULL,
> "OBJECT_ID" NUMBER NULL,
> "DATA_OBJECT_ID" NUMBER NULL,
> "OBJECT_TYPE" VARCHAR2(23) NULL,
> "CREATED" DATE NULL,
> "LAST_DDL_TIME" DATE NULL,
> "TIMESTAMP" VARCHAR2(19) NULL,
> "STATUS" VARCHAR2(7) NULL,
> "TEMPORARY" VARCHAR2(1) NULL,
> "GENERATED" VARCHAR2(1) NULL,
> "SECONDARY" VARCHAR2(1) NULL,
> "NAMESPACE" NUMBER NULL,
> "EDITION_NAME" VARCHAR2(128) NULL,
> "SHARING" VARCHAR2(13) NULL,
> "EDITIONABLE" VARCHAR2(1) NULL,
> "ORACLE_MAINTAINED" VARCHAR2(1) NULL
> )
> GO
> Test example:
> INSERT INTO SYSTEM.POC_OBJECTS_2(OWNER, OBJECT_NAME, SUBOBJECT_NAME,
> OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP,
> STATUS, TEMPORARY, GENERATED, SECONDARY, NAMESPACE, EDITION_NAME, SHARING,
> EDITIONABLE, ORACLE_MAINTAINED)
> VALUES('', '', '', 0, 0, '', SYSDATE, SYSDATE, '', '', '', '', '', 0, '',
> '', '', '')
> GO
> sqoop job execute from oracle to hdfs ,everything is ok.
> use hadoop cat .the hfds file content is
> [mr@da231 ~]$ /home/hdfs/hdfs/bin/hadoop fs -cat
> /wzc/767bdbc3-cb0f-4b86-a025-0150bfd96ec5.txt
> NULL,NULL,NULL,0,0,NULL,'2015-09-22 14:39:33.000','2015-09-22
> 14:39:33.000',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL
> but execute job from hdfs to oracle .there are some error.
> 2015-09-22 10:54:20,658 [OutputFormatLoader-consumer] ERROR
> org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor - Error while loading
> data out of MR job.
> java.lang.ClassCastException: org.joda.time.LocalDateTime cannot be cast to
> org.joda.time.DateTime
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcExecutor.addBatch(GenericJdbcExecutor.java:190)
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcLoader.load(GenericJdbcLoader.java:50)
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcLoader.load(GenericJdbcLoader.java:25)
> at
> org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor$ConsumerThread.run(SqoopOutputFormatLoadExecutor.java:250)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
> 2015-09-22 10:54:20,658 ERROR [OutputFormatLoader-consumer]
> mr.SqoopOutputFormatLoadExecutor
> (SqoopOutputFormatLoadExecutor.java:run(257)) - Error while loading data out
> of MR job.
> java.lang.ClassCastException: org.joda.time.LocalDateTime cannot be cast to
> org.joda.time.DateTime
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcExecutor.addBatch(GenericJdbcExecutor.java:190)
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcLoader.load(GenericJdbcLoader.java:50)
> at
> org.apache.sqoop.connector.jdbc.GenericJdbcLoader.load(GenericJdbcLoader.java:25)
> at
> org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor$ConsumerThread.run(SqoopOutputFormatLoadExecutor.java:250)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
> 2015-09-22 10:54:20,662 [LocalJobRunner Map Task Executor #0] INFO
> org.apache.sqoop.job.mr.SqoopMapper - Stopping progress service
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)