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

Properly escape table name in generated queries

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.5
    • 1.4.6
    • None
    • None

    Description

      I've got user reporting broken incremental import if the table name contained non-alphanumerical characters (dashes, ...):

      14/12/12 02:35:35 INFO tool.ImportTool: Maximal id query for free form incremental import: SELECT MAX(`name`) FROM my-table
      14/12/12 02:35:35 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-table' at line 1
          at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:316)
          at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:488)
          at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
          at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
          at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
          at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
          at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
          at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
          at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
      Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-table' at line 1
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
          at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
          at com.mysql.jdbc.Util.getInstance(Util.java:382)
          at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
          at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
          at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570)
          at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1476)
          at org.apache.sqoop.tool.ImportTool.getMaxColumnId(ImportTool.java:231)
          at org.apache.sqoop.tool.ImportTool.initIncrementalConstraints(ImportTool.java:303)
      

      It seems that we're not properly escaping the table name in all queries and we should rectify that.

      Attachments

        1. SQOOP-1890.patch
          16 kB
          Jarek Jarcec Cecho
        2. SQOOP-1890.patch
          3 kB
          Jarek Jarcec Cecho

        Issue Links

          Activity

            People

              jarcec Jarek Jarcec Cecho
              jarcec Jarek Jarcec Cecho
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: