You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sqoop.apache.org by "Ajay Chitre (JIRA)" <ji...@apache.org> on 2014/03/19 20:03:48 UTC

[jira] [Commented] (SQOOP-1295) Sqoop Merge supports only one column merge key. Merge fails if source table as composite key

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

Ajay Chitre commented on SQOOP-1295:
------------------------------------

Hello,

Virendra (Singh) & I ran into this issue while working on a project at Cisco.  We are importing some tables from Teradata that have UPI (unique primary key) which is made up of more than one column.  When we tried to use:

--merge-key ‘column1, column2’

We got an error saying: “Cannot join values on null key. Did you specify a key column that exists?”

To get around this, we added a method (getKeyObject) in MergeMapperBase given below that takes in a comma separated list.  This is being called in ‘processRecord’ method as follows:

String keyObj = getKeyObject(fieldMap, keyColName, "\u0001");

We’ve attached two files (DlMergeMapperBase.java & DlMergeMapperBase_Test) for your review.  If the ‘Dev’ team thinks this is useful we will submit a patch.

Thanks.

- Ajay Chitre
achitre@cisco.com

Virendra Singh
virsingh@cisco.com


    public String getKeyObject(Map<String, Object> fieldMap, String mergeKey, String fieldSeparator)
            throws IOException {
        assert (fieldMap != null);
        assert (mergeKey != null);
        assert (fieldSeparator != null);

        String key = "";
        String columns[] = mergeKey.split(",");
        for (int i = 0; i < columns.length; i++) {
            if (i != 0) {
                key += fieldSeparator;
            }
            Object value = fieldMap.get(columns[i].trim());
            if (value == null) {
                throw new IOException("Cannot join values on null key. "
                        + "Did you specify a key column that exists?");
            }
            key += value.toString();
        }
        return key;
    }


> Sqoop Merge supports only one column merge key. Merge fails if source table as composite key
> --------------------------------------------------------------------------------------------
>
>                 Key: SQOOP-1295
>                 URL: https://issues.apache.org/jira/browse/SQOOP-1295
>             Project: Sqoop
>          Issue Type: Bug
>          Components: tools
>    Affects Versions: 1.4.4
>         Environment: Linux
>            Reporter: Virendra Singh
>             Fix For: 1.4.5
>
>         Attachments: DlMergeMapperBase.java, DlMergeMapperBase_Test.java
>
>




--
This message was sent by Atlassian JIRA
(v6.2#6252)