You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by sz...@apache.org on 2014/11/12 00:46:35 UTC

svn commit: r1638597 [1/2] - in /hive/trunk: metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java ql/src/test/queries/clientpositive/partition_multilevels.q ql/src/test/results/clientpositive/partition_multilevels.q.out

Author: szehon
Date: Tue Nov 11 23:46:34 2014
New Revision: 1638597

URL: http://svn.apache.org/r1638597
Log:
HIVE-8784 : Querying partition does not work with JDO enabled against PostgreSQL (Chaoyu Tang via Szehon)

Added:
    hive/trunk/ql/src/test/queries/clientpositive/partition_multilevels.q
    hive/trunk/ql/src/test/results/clientpositive/partition_multilevels.q.out
Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java?rev=1638597&r1=1638596&r2=1638597&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java Tue Nov 11 23:46:34 2014
@@ -367,20 +367,8 @@ public class ExpressionTree {
             partitionColumnIndex, partitionColumnCount, isOpEquals, filterBuilder);
         return;
       }
-
-      String keyEqual = FileUtils.escapePathName(keyName) + "=";
-      String valString = "partitionName.substring(";
-      String indexOfKeyStr = "";
-      if (partitionColumnIndex != 0) {
-        keyEqual = "/" + keyEqual;
-        indexOfKeyStr = "partitionName.indexOf(\"" + keyEqual + "\") + ";
-        valString += indexOfKeyStr;
-      }
-      valString += keyEqual.length();
-      if (partitionColumnIndex != (partitionColumnCount - 1)) {
-        valString += ", partitionName.concat(\"/\").indexOf(\"/\", " + indexOfKeyStr + keyEqual.length() + ")";
-      }
-      valString += ")";
+      //get the value for a partition key form MPartition.values (PARTITION_KEY_VALUES)
+      String valString = "values.get(" + partitionColumnIndex + ")";
 
       if (operator == Operator.LIKE) {
         if (isReverseOrder) {

Added: hive/trunk/ql/src/test/queries/clientpositive/partition_multilevels.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/partition_multilevels.q?rev=1638597&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/partition_multilevels.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/partition_multilevels.q Tue Nov 11 23:46:34 2014
@@ -0,0 +1,93 @@
+create table partition_test_multilevel (key string, value string) partitioned by (level1 string, level2 string, level3 string);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='111', level3='11') select key, value from srcpart tablesample (11 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='111', level3='22') select key, value from srcpart tablesample (12 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='111', level3='33') select key, value from srcpart tablesample (13 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='111', level3='44') select key, value from srcpart tablesample (14 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='222', level3='11') select key, value from srcpart tablesample (15 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='222', level3='22') select key, value from srcpart tablesample (16 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='222', level3='33') select key, value from srcpart tablesample (17 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='222', level3='44') select key, value from srcpart tablesample (18 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='333', level3='11') select key, value from srcpart tablesample (19 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='333', level3='22') select key, value from srcpart tablesample (20 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='333', level3='33') select key, value from srcpart tablesample (21 rows);
+insert overwrite table partition_test_multilevel partition(level1='1111', level2='333', level3='44') select key, value from srcpart tablesample (22 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='111', level3='11') select key, value from srcpart tablesample (11 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='111', level3='22') select key, value from srcpart tablesample (12 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='111', level3='33') select key, value from srcpart tablesample (13 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='111', level3='44') select key, value from srcpart tablesample (14 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='222', level3='11') select key, value from srcpart tablesample (15 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='222', level3='22') select key, value from srcpart tablesample (16 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='222', level3='33') select key, value from srcpart tablesample (17 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='222', level3='44') select key, value from srcpart tablesample (18 rows);
+
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='333', level3='11') select key, value from srcpart tablesample (19 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='333', level3='22') select key, value from srcpart tablesample (20 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='333', level3='33') select key, value from srcpart tablesample (21 rows);
+insert overwrite table partition_test_multilevel partition(level1='2222', level2='333', level3='44') select key, value from srcpart tablesample (22 rows);
+
+set metaconf:hive.metastore.try.direct.sql=false;
+
+-- beginning level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 = '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 >= '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 !='2222' group by level1, level2, level3;
+
+-- middle level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 = '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 <= '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 != '222' group by level1, level2, level3;
+
+-- ending level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 = '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 >= '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 != '22' group by level1, level2, level3;
+
+-- two different levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 >= '222' and level3 = '33' group by level1, level2, level3;
+
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 <= '1111' and level3 >= '33' group by level1, level2, level3;
+
+
+-- all levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 = '2222' and level2 >= '222' and level3 <= '33' group by level1, level2, level3;
+
+-- between
+select level1, level2, level3, count(*) from partition_test_multilevel where (level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' and '33') group by level1, level2, level3;
+
+explain select level1, level2, level3, count(*) from partition_test_multilevel where (level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' and '33') group by level1, level2, level3;
+
+set metaconf:hive.metastore.try.direct.sql=true;
+
+-- beginning level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 = '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 >= '2222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 !='2222' group by level1, level2, level3;
+
+-- middle level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 = '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 <= '222' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 != '222' group by level1, level2, level3;
+
+-- ending level partition in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 = '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 >= '22' group by level1, level2, level3;
+select level1, level2, level3, count(*) from partition_test_multilevel where level3 != '22' group by level1, level2, level3;
+
+-- two different levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level2 >= '222' and level3 = '33' group by level1, level2, level3;
+
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 <= '1111' and level3 >= '33' group by level1, level2, level3;
+
+
+-- all levels of partitions in predicate
+select level1, level2, level3, count(*) from partition_test_multilevel where level1 = '2222' and level2 >= '222' and level3 <= '33' group by level1, level2, level3;
+
+-- between
+select level1, level2, level3, count(*) from partition_test_multilevel where (level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' and '33') group by level1, level2, level3;
+
+explain select level1, level2, level3, count(*) from partition_test_multilevel where (level1 = '2222') and (level2 between '222' and '333') and (level3 between '11' and '33') group by level1, level2, level3;