Uploaded image for project: 'Sqoop (Retired)'
  1. Sqoop (Retired)
  2. SQOOP-3166

Sqoop1 (import + --query + aggregate function + --split-by -m >=2) fails with error (unknown column)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • None
    • None

    Description

      This issue appears to be RDBMS generic.

      Test Case

      ########################################################################
      # Description:
      # 
      # 1. Sqoop import fails with Unknown Column error with the following conditions
      # 1.1. Using --query + sql aggregate function() + --split-by + --num-mappers >1 fails
      # 2. The Sqoop documentation does not seem to clarify requirements for "select list" and "--split-by" 
      #
      # Documentation
      # http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.10.0/SqoopUserGuide.html#_controlling_parallelism
      # 7.2.4. Controlling Parallelism
      ########################################################################
      
      #################
      # STEP 01 - [ORACLE] Create Data
      #################
      
      export MYCONN=jdbc:oracle:thin:@oracle1.cloudera.com:1521/db11g;
      export MYUSER=sqoop
      export MYPSWD=cloudera
      
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "drop table t1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "drop view v1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "create table t1 (c1 int, c2 date, c3 varchar(10))"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "insert into t1 values (1, current_date, 'some data')"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "create view v1 as select c1 as \"ID\", c2, c3 from t1" 
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1"
      
      ------------------------
      | COUNT(C1)            | 
      ------------------------
      | 1                    | 
      ------------------------
      ~~~~~
      ------------------------
      | COUNT(ID)            | 
      ------------------------
      | 1                    | 
      ------------------------
      
      #################
      # STEP 02 - [ORACLE] Import from Table/View with --num-mappes 2 (reproduction)
      #################
      
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 2 --split-by C1 --verbose
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 2 --split-by ID --verbose
      
      Output:
      17/04/03 09:09:11 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(C1), MAX(C1) FROM (select count(c1) from t1 where  (1 = 1) ) t1
      17/04/03 09:09:11 INFO mapreduce.JobSubmitter: Cleaning up the staging area /user/root/.staging/job_1490976836761_0069
      17/04/03 09:09:11 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: java.sql.SQLSyntaxErrorException: ORA-00904: "C1": invalid identifier
      ~~~~~
      17/04/03 09:10:01 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(ID), MAX(ID) FROM (select count(id) from v1 where  (1 = 1) ) t1
      17/04/03 09:10:01 INFO mapreduce.JobSubmitter: Cleaning up the staging area /user/root/.staging/job_1490976836761_0070
      17/04/03 09:10:01 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: java.sql.SQLSyntaxErrorException: ORA-00904: "ID": invalid identifier
      
      #################
      # STEP 03 - [ORACLE] Import from Table/View with --num-mappes 1 (workaround)
      #################
      
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 1 --split-by C1 --verbose
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 1 --split-by ID --verbose
      
      Output:
      17/04/03 09:07:11 INFO mapreduce.ImportJobBase: Transferred 2 bytes in 21.5799 seconds (0.0927 bytes/sec)
      17/04/03 09:07:11 INFO mapreduce.ImportJobBase: Retrieved 1 records.
      ~~~~~
      17/04/03 09:08:13 INFO mapreduce.ImportJobBase: Transferred 2 bytes in 20.4732 seconds (0.0977 bytes/sec)
      17/04/03 09:08:13 INFO mapreduce.ImportJobBase: Retrieved 1 records.
      
      #################
      # STEP 04 - [MYSQL] Create Data
      #################
      
      export MYCONN=jdbc:mysql://mysql1.cloudera.com:3306/db_coe
      export MYUSER=sqoop
      export MYPSWD=cloudera
      
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "drop table t1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "drop view v1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "create table t1 (c1 int, c2 date, c3 varchar(10))"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "insert into t1 values (1, current_date, 'some data')"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "create view v1 as select c1 as id, c2, c3 from t1" 
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1"
      sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1"
      
      Output:
      ------------------------
      | count(c1)            | 
      ------------------------
      | 1                    | 
      ------------------------
      ~~~~~
      ------------------------
      | count(id)            | 
      ------------------------
      | 1                    | 
      ------------------------
      
      #################
      # STEP 05 - [MYSQL] Import from Table/View with --num-mappes 2 (reproduction)
      #################
      
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 2 --split-by c1 --verbose
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 2 --split-by id --verbose
      
      Output:
      17/04/03 09:37:57 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(c1), MAX(c1) FROM (select count(c1) from t1 where  (1 = 1) ) AS t1
      17/04/03 09:37:57 INFO mapreduce.JobSubmitter: Cleaning up the staging area /user/root/.staging/job_1490976836761_0078
      17/04/03 09:37:57 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'c1' in 'field list'
      ~~~~~
      17/04/03 09:38:29 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(id), MAX(id) FROM (select count(id) from v1 where  (1 = 1) ) AS t1
      17/04/03 09:38:29 INFO mapreduce.JobSubmitter: Cleaning up the staging area /user/root/.staging/job_1490976836761_0079
      17/04/03 09:38:29 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'id' in 'field list'
      
      #################
      # STEP 06 - [MYSQL] Import from Table/View with --num-mappes 1 (workaround)
      #################
      
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(c1) from t1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 1 --split-by c1 --verbose
      sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --query "select count(id) from v1 where \$CONDITIONS" --target-dir /user/root/t1 --delete-target-dir --num-mappers 1 --split-by id --verbose
      
      Output:
      17/04/03 09:40:40 INFO mapreduce.ImportJobBase: Transferred 2 bytes in 36.5269 seconds (0.0548 bytes/sec)
      17/04/03 09:40:40 INFO mapreduce.ImportJobBase: Retrieved 1 records.
      ~~~~~
      17/04/03 09:45:19 INFO mapreduce.ImportJobBase: Transferred 2 bytes in 22.4301 seconds (0.0892 bytes/sec)
      17/04/03 09:45:19 INFO mapreduce.ImportJobBase: Retrieved 1 records.
      

      Attachments

        Activity

          People

            sanysandish@gmail.com Sandish Kumar HN
            markuskemper@me.com Markus Kemper
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: