You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/03/21 18:15:53 UTC

[2/5] impala git commit: IMPALA-6687: Fix INSERT with mixed case partition column name

IMPALA-6687: Fix INSERT with mixed case partition column name

For INSERT/UPSERT where a column permutation is specified but some
columns are excluded, Impala would fail with an AnalysisException if
a partition column for an HDFS table specified in the column
permutation, i.e. not in the partition clause (or equivalently, a
row-key column for an HBase table or a primary key for a Kudu table)
was specified with some upper case letters.

Testing:
- Added analysis tests for all of the above scenarios.

Change-Id: If6975c2978850381904a45107f76850640aff52e
Reviewed-on: http://gerrit.cloudera.org:8080/9728
Reviewed-by: Alex Behm <al...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/d7c8902d
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/d7c8902d
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/d7c8902d

Branch: refs/heads/master
Commit: d7c8902dc8f66be38f97cf4d6caae62f80ffd372
Parents: 3d65f85
Author: Thomas Tauber-Marshall <tm...@cloudera.com>
Authored: Tue Mar 20 15:33:34 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 21 03:20:26 2018 +0000

----------------------------------------------------------------------
 .../org/apache/impala/analysis/InsertStmt.java  |  2 +-
 .../impala/analysis/AnalyzeStmtsTest.java       | 24 ++++++++++++++++++++
 .../impala/analysis/AnalyzeUpsertStmtTest.java  |  2 ++
 3 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/d7c8902d/fe/src/main/java/org/apache/impala/analysis/InsertStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/InsertStmt.java b/fe/src/main/java/org/apache/impala/analysis/InsertStmt.java
index 6a94f3f..ad05751 100644
--- a/fe/src/main/java/org/apache/impala/analysis/InsertStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/InsertStmt.java
@@ -332,7 +332,7 @@ public class InsertStmt extends StatementBase {
             "Unknown column '" + columnName + "' in column permutation");
       }
 
-      if (!mentionedColumnNames.add(columnName)) {
+      if (!mentionedColumnNames.add(column.getName())) {
         throw new AnalysisException(
             "Duplicate column '" + columnName + "' in column permutation");
       }

http://git-wip-us.apache.org/repos/asf/impala/blob/d7c8902d/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java b/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
index deeb0a8..4720abc 100644
--- a/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
+++ b/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
@@ -3198,6 +3198,8 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
       AnalysisError("insert into functional_kudu.testtbl(zip) values(1)",
           "All primary key columns must be specified for INSERTing into Kudu tables. " +
           "Missing columns are: id");
+      // Mixed column name case, on both primary key and non-primary key cols.
+      AnalyzesOk("insert into functional_kudu.alltypes (ID, BOOL_COL) values (0, true)");
     }
   }
 
@@ -3322,6 +3324,13 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
         "select * from functional.alltypes",
         "Target table 'functional.alltypessmall' has fewer columns (13) than the " +
         "SELECT / VALUES clause and PARTITION clause return (15)");
+
+    // Mixed column name case in the partition clause.
+    AnalyzesOk("insert " + qualifier + " table functional.alltypessmall " +
+        "partition (YEAR, month)" +
+        "select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, " +
+        "float_col, double_col, date_string_col, string_col, timestamp_col, year, " +
+        "month from functional.alltypes");
   }
 
   /**
@@ -3510,6 +3519,12 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
         "from functional.alltypes",
         "Non-constant expressions are not supported as static partition-key values " +
         "in 'month=int_col'.");
+    // Mixed column case in the partition clause.
+    AnalyzesOk("insert " + qualifier + " table functional.alltypessmall " +
+        "partition (year=2009, MONTH=4)" +
+        "select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, " +
+        "float_col, double_col, date_string_col, string_col, timestamp_col " +
+        "from functional.alltypes");
 
     if (qualifier.contains("OVERWRITE")) {
       AnalysisError("insert " + qualifier + " table functional_hbase.alltypessmall " +
@@ -3640,6 +3655,10 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
     AnalyzesOk("insert " + qualifier + " table functional.alltypes() " +
         "partition(year, month) select 1,2 from functional.alltypes");
 
+    // Mixed column case in permutation, both partition and non-partition cols.
+    AnalyzesOk("insert " + qualifier + " table functional.alltypes (ID, YEAR, month)" +
+        "values (0, 0, 0)");
+
     if (!qualifier.contains("OVERWRITE")) {
       // Simple permutation
       AnalyzesOk("insert " + qualifier + " table functional_hbase.alltypesagg" +
@@ -3661,6 +3680,11 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
           "float_col, double_col, date_string_col, string_col, timestamp_col from " +
           "functional.alltypesnopart",
           "Row-key column 'id' must be explicitly mentioned in column permutation.");
+      // Mixed column case on both row-key and non-row-key cols.
+      AnalyzesOk("insert " + qualifier + " table functional_hbase.alltypesagg" +
+          "(ID, bool_col, tinyint_col, smallint_col, INT_COL, bigint_col, " +
+          "float_col, double_col, date_string_col, string_col, timestamp_col) " +
+          "select * from functional.alltypesnopart");
     }
   }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/d7c8902d/fe/src/test/java/org/apache/impala/analysis/AnalyzeUpsertStmtTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/analysis/AnalyzeUpsertStmtTest.java b/fe/src/test/java/org/apache/impala/analysis/AnalyzeUpsertStmtTest.java
index fc7b51a..fdd2936 100644
--- a/fe/src/test/java/org/apache/impala/analysis/AnalyzeUpsertStmtTest.java
+++ b/fe/src/test/java/org/apache/impala/analysis/AnalyzeUpsertStmtTest.java
@@ -62,6 +62,8 @@ public class AnalyzeUpsertStmtTest extends AnalyzerTest {
     // Hint
     AnalyzesOk("upsert into table functional_kudu.testtbl [clustered] select * from " +
         "functional_kudu.testtbl");
+    // Mixed column name case on both primary key and non-primary key cols.
+    AnalyzesOk("upsert into functional_kudu.testtbl (ID, ZIP) values (0, 0)");
 
     // Key columns missing from permutation
     AnalysisError("upsert into functional_kudu.testtbl(zip) values(1)",