You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by gu...@apache.org on 2014/08/16 05:16:13 UTC

svn commit: r1618308 - in /hive/branches/cbo/ql/src: java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/ java/org/apache/hadoop/hive/ql/parse/ test/queries/clientpositive/ test/results/clientpositive/

Author: gunther
Date: Sat Aug 16 03:16:12 2014
New Revision: 1618308

URL: http://svn.apache.org/r1618308
Log:
HIVE-7750: CBO: PPD should Push Predicates on On clause if possible (Laljo John Pullokkaran via Gunther Hagleitner)

Modified:
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
    hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
    hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java?rev=1618308&r1=1618307&r2=1618308&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java Sat Aug 16 03:16:12 2014
@@ -29,7 +29,7 @@ import com.google.common.collect.Immutab
 public abstract class HivePushFilterPastJoinRule extends RelOptRule {
 
   public static final HivePushFilterPastJoinRule FILTER_ON_JOIN = new HivePushFilterPastJoinRule(
-      operand(HiveFilterRel.class, operand(HiveJoinRel.class, any())),
+      operand(FilterRelBase.class, operand(HiveJoinRel.class, any())),
       "HivePushFilterPastJoinRule:filter", true) {
     @Override
     public void onMatch(RelOptRuleCall call) {

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1618308&r1=1618307&r2=1618308&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Sat Aug 16 03:16:12 2014
@@ -11893,8 +11893,8 @@ public class SemanticAnalyzer extends Ba
       // Partition Pruning; otherwise Expression evaluation may try to execute
       // corelated sub query.
 			basePlan = hepPlan(basePlan, mdProvider,
-					HivePushFilterPastJoinRule.FILTER_ON_JOIN,
 					HivePushFilterPastJoinRule.JOIN,
+					HivePushFilterPastJoinRule.FILTER_ON_JOIN,
 					new HivePartitionPrunerRule(SemanticAnalyzer.this.conf));
 
       HiveRelFieldTrimmer fieldTrimmer = new HiveRelFieldTrimmer(null);

Modified: hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q?rev=1618308&r1=1618307&r2=1618308&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q (original)
+++ hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q Sat Aug 16 03:16:12 2014
@@ -205,9 +205,9 @@ with q1 as ( select c_int from q2 where 
 q2 as ( select c_int,c_boolean from v1  where value = '1')
 select sum(c_int) from (select c_int from q1) a;
 
---with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
---q2 as ( select c_int,c_boolean from v1  where value = '1')
---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int;
+with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
+q2 as ( select c_int,c_boolean from v1  where value = '1')
+select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int;
 
 
 drop view v1;

Modified: hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out?rev=1618308&r1=1618307&r2=1618308&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out (original)
+++ hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out Sat Aug 16 03:16:12 2014
@@ -15963,21 +15963,30 @@ POSTHOOK: Input: default@t1@dt=2014
 POSTHOOK: Input: default@v1
 #### A masked pattern was here ####
 2
-PREHOOK: query: --with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
---q2 as ( select c_int,c_boolean from v1  where value = '1')
---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int;
-
-
-drop view v1
+PREHOOK: query: with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
+q2 as ( select c_int,c_boolean from v1  where value = '1')
+select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@dt=2014
+PREHOOK: Input: default@v1
+PREHOOK: Input: default@v4
+#### A masked pattern was here ####
+POSTHOOK: query: with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
+q2 as ( select c_int,c_boolean from v1  where value = '1')
+select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@dt=2014
+POSTHOOK: Input: default@v1
+POSTHOOK: Input: default@v4
+#### A masked pattern was here ####
+31104
+PREHOOK: query: drop view v1
 PREHOOK: type: DROPVIEW
 PREHOOK: Input: default@v1
 PREHOOK: Output: default@v1
-POSTHOOK: query: --with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int),
---q2 as ( select c_int,c_boolean from v1  where value = '1')
---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int;
-
-
-drop view v1
+POSTHOOK: query: drop view v1
 POSTHOOK: type: DROPVIEW
 POSTHOOK: Input: default@v1
 POSTHOOK: Output: default@v1