[ 
https://issues.apache.org/jira/browse/SQOOP-456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13697496#comment-13697496
 ] 

Jonathan Leech commented on SQOOP-456:
--------------------------------------

Problem as I see it even with system properties / jdbc driver hacks / column 
mappings, is that with splits on an Oracle date column, Sqoop's generated sql 
statements have something like to_timestamp('format', 'the date of the split as 
text') and Oracle ain't never gonna treat that as a date no matter what, at 
least for the purposes of using either a date in an index or to go to a range 
of date partitions.

I may be missing something but my only way to avoid full scans on tables was to 
manually split the data with multiple invocations of Sqoop with different 
output directories and --where clauses, which worked but was annoying.

The different flavors of -D props for the Oracle driver would work if the 
splits queries used a bound parameter with a java.sql.Timestamp instead of 
to_timestamp, with the added benefit of a slight gain from Oracle not having to 
hard parse, and even crazy DBA stuff like query baselining etc. could then be 
possible. For that matter another command-line arg --hints would be pretty 
useful.

If you reopen this and let me loose on your codebase I will fix it for you. I 
would love to make it that much easier for people to migrate from Oracle.
                
> Generated Java class does not distinguish date and timestamp in Oracle DB 
> --------------------------------------------------------------------------
>
>                 Key: SQOOP-456
>                 URL: https://issues.apache.org/jira/browse/SQOOP-456
>             Project: Sqoop
>          Issue Type: Bug
>          Components: codegen
>            Reporter: Cheolsoo Park
>            Priority: Minor
>
> In genereated Java class, both date and timestamp are considered as 
> timestamps. For examples, the following getter method is generated for a date 
> column:
> {code:xml} 
> public void readFields(ResultSet __dbResults) throws SQLException {
>   this.__cur_result_set = __dbResults;
>   this.DATA_COL0 = JdbcWritableBridge.readTimestamp(1, __dbResults);
> }
> {code}
> This happens because both date and timestamp is labeled as Types.TIMESTAMP by 
> ConnManager. The fix seems straightforward. In ClassWriter, the new method 
> getColTypeNamesForTable introduced by Bilung at SQOOP-352 should replace 
> getColTypes(). 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to