Repository: hive
Updated Branches:
  refs/heads/master fde194e3c -> c2be4b717


HIVE-18008 : Add optimization rule to remove gby from right side of left 
semi-join (Vineet Garg, reviewed by Ashutosh Chauhan)


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

Branch: refs/heads/master
Commit: c2be4b717d46713ce2ecd5ee8cd4a57a0fdec770
Parents: fde194e
Author: Vineet Garg <vg...@apache.com>
Authored: Thu Nov 9 16:42:05 2017 -0800
Committer: Vineet Garg <vg...@apache.com>
Committed: Thu Nov 9 16:42:05 2017 -0800

----------------------------------------------------------------------
 .../rules/HiveRemoveGBYSemiJoinRule.java        |  79 +++
 .../hadoop/hive/ql/parse/CalcitePlanner.java    |  19 +-
 .../test/queries/clientpositive/subquery_in.q   |   4 +
 .../clientpositive/llap/subquery_in.q.out       | 693 ++++++++++++++++++-
 .../clientpositive/spark/subquery_in.q.out      | 675 +++++++++++++++++-
 .../subquery_unqualcolumnrefs.q.out             |  54 +-
 6 files changed, 1423 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRemoveGBYSemiJoinRule.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRemoveGBYSemiJoinRule.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRemoveGBYSemiJoinRule.java
new file mode 100644
index 0000000..4e6cce9
--- /dev/null
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRemoveGBYSemiJoinRule.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.ql.optimizer.calcite.rules;
+
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.JoinInfo;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories;
+import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSemiJoin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Planner rule that removes a {@code Aggregate} from a HiveSemiJoin
+ * right input
+ */
+public class HiveRemoveGBYSemiJoinRule extends RelOptRule {
+
+  protected static final Logger LOG = 
LoggerFactory.getLogger(HiveRemoveGBYSemiJoinRule.class);
+  public static final HiveRemoveGBYSemiJoinRule INSTANCE =
+      new HiveRemoveGBYSemiJoinRule() ;
+
+  public HiveRemoveGBYSemiJoinRule() {
+    super(
+            operand(HiveSemiJoin.class,
+                some(
+                    operand(RelNode.class, any()),
+                    operand(Aggregate.class, any()))),
+        HiveRelFactories.HIVE_BUILDER, "HiveRemoveGBYSemiJoinRule");
+  }
+
+    @Override public void onMatch(RelOptRuleCall call) {
+      final HiveSemiJoin semijoin= call.rel(0);
+
+      if(semijoin.getJoinType() != JoinRelType.INNER) {
+        return;
+      }
+      final RelNode left = call.rel(1);
+      final Aggregate rightAggregate= call.rel(2);
+
+      // if grouping sets are involved do early return
+      if(rightAggregate.indicator) {
+        return;
+      }
+
+      // if there is any aggregate function this group by is not un-necessary
+      if(!rightAggregate.getAggCallList().isEmpty()) {
+        return;
+      }
+      final JoinInfo joinInfo = semijoin.analyzeCondition();
+
+      boolean shouldTransform = joinInfo.rightSet().equals(
+          ImmutableBitSet.range(rightAggregate.getGroupCount()));
+      if(shouldTransform) {
+        RelNode newSemiJoin = 
call.builder().push(left).push(rightAggregate.getInput()).semiJoin(semijoin.getCondition()).build();
+        call.transformTo(newSemiJoin);
+      }
+    }
+  }
+// End HiveRemoveGBYSemiJoinRule

http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index 1363bbb..23b93cd 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -205,6 +205,7 @@ import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveReduceExpressionsWi
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRelDecorrelator;
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRelFieldTrimmer;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRemoveSqCountCheck;
+import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRemoveGBYSemiJoinRule;
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveRulesRegistry;
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveSemiJoinRule;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveSortJoinReduceRule;
@@ -1582,7 +1583,13 @@ public class CalcitePlanner extends SemanticAnalyzer {
         perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, 
"Calcite: Semijoin conversion");
       }
 
-      // 8. Get rid of sq_count_check if group by key is constant (HIVE-)
+      // 8. convert SemiJoin + GBy to SemiJoin
+        perfLogger.PerfLogBegin(this.getClass().getName(), 
PerfLogger.OPTIMIZER);
+        calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, 
mdProvider.getMetadataProvider(), null,
+            HiveRemoveGBYSemiJoinRule.INSTANCE);
+        perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, 
"Calcite: Removal of gby from semijoin");
+
+      // 9. Get rid of sq_count_check if group by key is constant (HIVE-)
       if (conf.getBoolVar(ConfVars.HIVE_REMOVE_SQ_COUNT_CHECK)) {
         perfLogger.PerfLogBegin(this.getClass().getName(), 
PerfLogger.OPTIMIZER);
         calciteOptimizedPlan =
@@ -1592,7 +1599,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
             "Calcite: Removing sq_count_check UDF ");
       }
 
-      // 9. Run rule to fix windowing issue when it is done over
+      // 10. Run rule to fix windowing issue when it is done over
       // aggregation columns (HIVE-10627)
       if (profilesCBO.contains(ExtendedCBOProfile.WINDOWING_POSTPROCESSING)) {
         perfLogger.PerfLogBegin(this.getClass().getName(), 
PerfLogger.OPTIMIZER);
@@ -1601,7 +1608,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
         perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, 
"Calcite: Window fixing rule");
       }
 
-      // 10. Apply Druid transformation rules
+      // 11. Apply Druid transformation rules
       perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
       calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, 
mdProvider.getMetadataProvider(), null,
               HepMatchOrder.BOTTOM_UP,
@@ -1619,10 +1626,10 @@ public class CalcitePlanner extends SemanticAnalyzer {
       );
       perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, 
"Calcite: Druid transformation rules");
 
-      // 11. Run rules to aid in translation from Calcite tree to Hive tree
+      // 12. Run rules to aid in translation from Calcite tree to Hive tree
       if (HiveConf.getBoolVar(conf, ConfVars.HIVE_CBO_RETPATH_HIVEOP)) {
         perfLogger.PerfLogBegin(this.getClass().getName(), 
PerfLogger.OPTIMIZER);
-        // 11.1. Merge join into multijoin operators (if possible)
+        // 12.1. Merge join into multijoin operators (if possible)
         calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, 
mdProvider.getMetadataProvider(), null,
                 HepMatchOrder.BOTTOM_UP, 
HiveJoinProjectTransposeRule.BOTH_PROJECT_INCLUDE_OUTER,
                 HiveJoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER,
@@ -1640,7 +1647,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
                 HiveFilterProjectTSTransposeRule.INSTANCE, 
HiveFilterProjectTSTransposeRule.INSTANCE_DRUID,
                 HiveProjectFilterPullUpConstantsRule.INSTANCE);
 
-        // 11.2.  Introduce exchange operators below join/multijoin operators
+        // 12.2.  Introduce exchange operators below join/multijoin operators
         calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, 
mdProvider.getMetadataProvider(), null,
                 HepMatchOrder.BOTTOM_UP, 
HiveInsertExchange4JoinRule.EXCHANGE_BELOW_JOIN,
                 HiveInsertExchange4JoinRule.EXCHANGE_BELOW_MULTIJOIN);

http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/test/queries/clientpositive/subquery_in.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/subquery_in.q 
b/ql/src/test/queries/clientpositive/subquery_in.q
index 33cc2fe..7d4ece9 100644
--- a/ql/src/test/queries/clientpositive/subquery_in.q
+++ b/ql/src/test/queries/clientpositive/subquery_in.q
@@ -114,6 +114,10 @@ where b.key in
         )
 ;
 
+-- Right side shouldn't have aggregate
+explain select * from src b where b.key in (select distinct key from src a 
where a.value > b.value);
+select * from src b where b.key in (select distinct key from src a where 
a.value > b.value);
+
 
 -- non agg, non corr, windowing
 select p_mfgr, p_name, p_size 

http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/test/results/clientpositive/llap/subquery_in.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/subquery_in.q.out 
b/ql/src/test/results/clientpositive/llap/subquery_in.q.out
index c7b98d3..f59ad7a 100644
--- a/ql/src/test/results/clientpositive/llap/subquery_in.q.out
+++ b/ql/src/test/results/clientpositive/llap/subquery_in.q.out
@@ -628,8 +628,7 @@ STAGE PLANS:
     Tez
 #### A masked pattern was here ####
       Edges:
-        Reducer 2 <- Map 1 (SIMPLE_EDGE), Reducer 3 (SIMPLE_EDGE)
-        Reducer 3 <- Map 1 (SIMPLE_EDGE)
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 3 (SIMPLE_EDGE)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -649,16 +648,30 @@ STAGE PLANS:
                         sort order: ++
                         Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
                         Statistics: Num rows: 166 Data size: 29548 Basic 
stats: COMPLETE Column stats: COMPLETE
-                    Group By Operator
-                      keys: key (type: string), value (type: string)
-                      mode: hash
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: ((key > '9') and value is not null) (type: 
boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
                       outputColumnNames: _col0, _col1
-                      Statistics: Num rows: 83 Data size: 14774 Basic stats: 
COMPLETE Column stats: COMPLETE
-                      Reduce Output Operator
-                        key expressions: _col0 (type: string), _col1 (type: 
string)
-                        sort order: ++
-                        Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                      Statistics: Num rows: 166 Data size: 29548 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string), _col1 (type: string)
+                        mode: hash
+                        outputColumnNames: _col0, _col1
                         Statistics: Num rows: 83 Data size: 14774 Basic stats: 
COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string), _col1 (type: 
string)
+                          sort order: ++
+                          Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                          Statistics: Num rows: 83 Data size: 14774 Basic 
stats: COMPLETE Column stats: COMPLETE
             Execution mode: llap
             LLAP IO: no inputs
         Reducer 2 
@@ -671,32 +684,14 @@ STAGE PLANS:
                   0 _col0 (type: string), _col1 (type: string)
                   1 _col0 (type: string), _col1 (type: string)
                 outputColumnNames: _col0, _col1
-                Statistics: Num rows: 66 Data size: 11748 Basic stats: 
COMPLETE Column stats: COMPLETE
+                Statistics: Num rows: 133 Data size: 23674 Basic stats: 
COMPLETE Column stats: COMPLETE
                 File Output Operator
                   compressed: false
-                  Statistics: Num rows: 66 Data size: 11748 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  Statistics: Num rows: 133 Data size: 23674 Basic stats: 
COMPLETE Column stats: COMPLETE
                   table:
                       input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
                       output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                       serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
-        Reducer 3 
-            Execution mode: llap
-            Reduce Operator Tree:
-              Group By Operator
-                keys: KEY._col0 (type: string), KEY._col1 (type: string)
-                mode: mergepartial
-                outputColumnNames: _col0, _col1
-                Statistics: Num rows: 83 Data size: 14774 Basic stats: 
COMPLETE Column stats: COMPLETE
-                Group By Operator
-                  keys: _col0 (type: string), _col1 (type: string)
-                  mode: hash
-                  outputColumnNames: _col0, _col1
-                  Statistics: Num rows: 41 Data size: 7298 Basic stats: 
COMPLETE Column stats: COMPLETE
-                  Reduce Output Operator
-                    key expressions: _col0 (type: string), _col1 (type: string)
-                    sort order: ++
-                    Map-reduce partition columns: _col0 (type: string), _col1 
(type: string)
-                    Statistics: Num rows: 41 Data size: 7298 Basic stats: 
COMPLETE Column stats: COMPLETE
 
   Stage: Stage-0
     Fetch Operator
@@ -890,6 +885,644 @@ POSTHOOK: Input: default@src
 97     val_97
 98     val_98
 98     val_98
+Warning: Shuffle Join MERGEJOIN[30][tables = [$hdt$_1, $hdt$_2]] in Stage 
'Reducer 3' is a cross product
+PREHOOK: query: explain select * from src b where b.key in (select distinct 
key from src a where a.value > b.value)
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from src b where b.key in (select distinct 
key from src a where a.value > b.value)
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Reducer 3 (SIMPLE_EDGE)
+        Reducer 3 <- Map 1 (XPROD_EDGE), Reducer 5 (XPROD_EDGE)
+        Reducer 5 <- Map 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (key is not null and value is not null) (type: 
boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: 
string)
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                        Statistics: Num rows: 500 Data size: 89000 Basic 
stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        sort order: 
+                        Statistics: Num rows: 500 Data size: 89000 Basic 
stats: COMPLETE Column stats: COMPLETE
+                        value expressions: _col0 (type: string), _col1 (type: 
string)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 45500 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: value is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 45500 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: value (type: string)
+                      mode: hash
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 250 Data size: 22750 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string)
+                        sort order: +
+                        Map-reduce partition columns: _col0 (type: string)
+                        Statistics: Num rows: 250 Data size: 22750 Basic 
stats: COMPLETE Column stats: COMPLETE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 _col0 (type: string), _col1 (type: string)
+                  1 _col0 (type: string), _col1 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+        Reducer 3 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 
+                  1 
+                outputColumnNames: _col0, _col1, _col2
+                residual filter predicates: {(_col1 > _col2)}
+                Statistics: Num rows: 41666 Data size: 11208154 Basic stats: 
COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: _col0 (type: string), _col1 (type: string)
+                  outputColumnNames: _col0, _col1
+                  Statistics: Num rows: 41666 Data size: 7416548 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  Group By Operator
+                    keys: _col0 (type: string), _col1 (type: string)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 10609 Data size: 1888402 Basic 
stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: string), _col1 (type: 
string)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                      Statistics: Num rows: 10609 Data size: 1888402 Basic 
stats: COMPLETE Column stats: COMPLETE
+        Reducer 5 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0
+                Statistics: Num rows: 250 Data size: 22750 Basic stats: 
COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  sort order: 
+                  Statistics: Num rows: 250 Data size: 22750 Basic stats: 
COMPLETE Column stats: COMPLETE
+                  value expressions: _col0 (type: string)
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+Warning: Shuffle Join MERGEJOIN[30][tables = [$hdt$_1, $hdt$_2]] in Stage 
'Reducer 3' is a cross product
+PREHOOK: query: select * from src b where b.key in (select distinct key from 
src a where a.value > b.value)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: select * from src b where b.key in (select distinct key from 
src a where a.value > b.value)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+10     val_10
+100    val_100
+100    val_100
+103    val_103
+103    val_103
+104    val_104
+104    val_104
+105    val_105
+11     val_11
+111    val_111
+113    val_113
+113    val_113
+114    val_114
+116    val_116
+118    val_118
+118    val_118
+119    val_119
+119    val_119
+119    val_119
+12     val_12
+12     val_12
+120    val_120
+120    val_120
+125    val_125
+125    val_125
+126    val_126
+128    val_128
+128    val_128
+128    val_128
+129    val_129
+129    val_129
+131    val_131
+133    val_133
+134    val_134
+134    val_134
+136    val_136
+137    val_137
+137    val_137
+138    val_138
+138    val_138
+138    val_138
+138    val_138
+143    val_143
+145    val_145
+146    val_146
+146    val_146
+149    val_149
+149    val_149
+15     val_15
+15     val_15
+150    val_150
+152    val_152
+152    val_152
+153    val_153
+155    val_155
+156    val_156
+157    val_157
+158    val_158
+160    val_160
+162    val_162
+163    val_163
+164    val_164
+164    val_164
+165    val_165
+165    val_165
+166    val_166
+167    val_167
+167    val_167
+167    val_167
+168    val_168
+169    val_169
+169    val_169
+169    val_169
+169    val_169
+17     val_17
+170    val_170
+172    val_172
+172    val_172
+174    val_174
+174    val_174
+175    val_175
+175    val_175
+176    val_176
+176    val_176
+177    val_177
+178    val_178
+179    val_179
+179    val_179
+18     val_18
+18     val_18
+180    val_180
+181    val_181
+183    val_183
+186    val_186
+187    val_187
+187    val_187
+187    val_187
+189    val_189
+19     val_19
+190    val_190
+191    val_191
+191    val_191
+192    val_192
+193    val_193
+193    val_193
+193    val_193
+194    val_194
+195    val_195
+195    val_195
+196    val_196
+197    val_197
+197    val_197
+199    val_199
+199    val_199
+199    val_199
+2      val_2
+20     val_20
+200    val_200
+200    val_200
+201    val_201
+202    val_202
+203    val_203
+203    val_203
+205    val_205
+205    val_205
+207    val_207
+207    val_207
+208    val_208
+208    val_208
+208    val_208
+209    val_209
+209    val_209
+213    val_213
+213    val_213
+214    val_214
+216    val_216
+216    val_216
+217    val_217
+217    val_217
+218    val_218
+219    val_219
+219    val_219
+221    val_221
+221    val_221
+222    val_222
+223    val_223
+223    val_223
+224    val_224
+224    val_224
+226    val_226
+228    val_228
+229    val_229
+229    val_229
+230    val_230
+230    val_230
+230    val_230
+230    val_230
+230    val_230
+233    val_233
+233    val_233
+235    val_235
+237    val_237
+237    val_237
+238    val_238
+238    val_238
+239    val_239
+239    val_239
+24     val_24
+24     val_24
+241    val_241
+242    val_242
+242    val_242
+244    val_244
+247    val_247
+248    val_248
+249    val_249
+252    val_252
+255    val_255
+255    val_255
+256    val_256
+256    val_256
+257    val_257
+258    val_258
+26     val_26
+26     val_26
+260    val_260
+262    val_262
+263    val_263
+265    val_265
+265    val_265
+266    val_266
+27     val_27
+272    val_272
+272    val_272
+273    val_273
+273    val_273
+273    val_273
+274    val_274
+275    val_275
+277    val_277
+277    val_277
+277    val_277
+277    val_277
+278    val_278
+278    val_278
+28     val_28
+280    val_280
+280    val_280
+281    val_281
+281    val_281
+282    val_282
+282    val_282
+283    val_283
+284    val_284
+285    val_285
+286    val_286
+287    val_287
+288    val_288
+288    val_288
+289    val_289
+291    val_291
+292    val_292
+296    val_296
+298    val_298
+298    val_298
+298    val_298
+30     val_30
+302    val_302
+305    val_305
+306    val_306
+307    val_307
+307    val_307
+308    val_308
+309    val_309
+309    val_309
+310    val_310
+311    val_311
+311    val_311
+311    val_311
+315    val_315
+316    val_316
+316    val_316
+316    val_316
+317    val_317
+317    val_317
+318    val_318
+318    val_318
+318    val_318
+321    val_321
+321    val_321
+322    val_322
+322    val_322
+323    val_323
+325    val_325
+325    val_325
+327    val_327
+327    val_327
+327    val_327
+33     val_33
+331    val_331
+331    val_331
+332    val_332
+333    val_333
+333    val_333
+335    val_335
+336    val_336
+338    val_338
+339    val_339
+34     val_34
+341    val_341
+342    val_342
+342    val_342
+344    val_344
+344    val_344
+345    val_345
+348    val_348
+348    val_348
+348    val_348
+348    val_348
+348    val_348
+35     val_35
+35     val_35
+35     val_35
+351    val_351
+353    val_353
+353    val_353
+356    val_356
+360    val_360
+362    val_362
+364    val_364
+365    val_365
+366    val_366
+367    val_367
+367    val_367
+368    val_368
+369    val_369
+369    val_369
+369    val_369
+37     val_37
+37     val_37
+373    val_373
+374    val_374
+375    val_375
+377    val_377
+378    val_378
+379    val_379
+382    val_382
+382    val_382
+384    val_384
+384    val_384
+384    val_384
+386    val_386
+389    val_389
+392    val_392
+393    val_393
+394    val_394
+395    val_395
+395    val_395
+396    val_396
+396    val_396
+396    val_396
+397    val_397
+397    val_397
+399    val_399
+399    val_399
+4      val_4
+400    val_400
+401    val_401
+401    val_401
+401    val_401
+401    val_401
+401    val_401
+402    val_402
+403    val_403
+403    val_403
+403    val_403
+404    val_404
+404    val_404
+406    val_406
+406    val_406
+406    val_406
+406    val_406
+407    val_407
+409    val_409
+409    val_409
+409    val_409
+41     val_41
+411    val_411
+413    val_413
+413    val_413
+414    val_414
+414    val_414
+417    val_417
+417    val_417
+417    val_417
+418    val_418
+419    val_419
+42     val_42
+42     val_42
+421    val_421
+424    val_424
+424    val_424
+427    val_427
+429    val_429
+429    val_429
+43     val_43
+430    val_430
+430    val_430
+430    val_430
+431    val_431
+431    val_431
+431    val_431
+432    val_432
+435    val_435
+436    val_436
+437    val_437
+438    val_438
+438    val_438
+438    val_438
+439    val_439
+439    val_439
+44     val_44
+443    val_443
+444    val_444
+446    val_446
+448    val_448
+449    val_449
+452    val_452
+453    val_453
+454    val_454
+454    val_454
+454    val_454
+455    val_455
+457    val_457
+458    val_458
+458    val_458
+459    val_459
+459    val_459
+460    val_460
+462    val_462
+462    val_462
+463    val_463
+463    val_463
+466    val_466
+466    val_466
+466    val_466
+467    val_467
+468    val_468
+468    val_468
+468    val_468
+468    val_468
+469    val_469
+469    val_469
+469    val_469
+469    val_469
+469    val_469
+47     val_47
+470    val_470
+472    val_472
+475    val_475
+477    val_477
+478    val_478
+478    val_478
+479    val_479
+480    val_480
+480    val_480
+480    val_480
+481    val_481
+482    val_482
+483    val_483
+484    val_484
+485    val_485
+487    val_487
+489    val_489
+489    val_489
+489    val_489
+489    val_489
+490    val_490
+491    val_491
+492    val_492
+492    val_492
+493    val_493
+494    val_494
+495    val_495
+496    val_496
+497    val_497
+498    val_498
+498    val_498
+498    val_498
+5      val_5
+5      val_5
+5      val_5
+51     val_51
+51     val_51
+53     val_53
+54     val_54
+57     val_57
+58     val_58
+58     val_58
+64     val_64
+65     val_65
+66     val_66
+67     val_67
+67     val_67
+69     val_69
+70     val_70
+70     val_70
+70     val_70
+72     val_72
+72     val_72
+74     val_74
+76     val_76
+76     val_76
+77     val_77
+78     val_78
+8      val_8
+80     val_80
+82     val_82
+83     val_83
+83     val_83
+84     val_84
+84     val_84
+85     val_85
+86     val_86
+87     val_87
+9      val_9
+90     val_90
+90     val_90
+90     val_90
+92     val_92
+95     val_95
+95     val_95
+96     val_96
+97     val_97
+97     val_97
+98     val_98
+98     val_98
 PREHOOK: query: select p_mfgr, p_name, p_size 
 from part 
 where part.p_size in 

http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/test/results/clientpositive/spark/subquery_in.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/subquery_in.q.out 
b/ql/src/test/results/clientpositive/spark/subquery_in.q.out
index fd25e36..3079648 100644
--- a/ql/src/test/results/clientpositive/spark/subquery_in.q.out
+++ b/ql/src/test/results/clientpositive/spark/subquery_in.q.out
@@ -599,8 +599,7 @@ STAGE PLANS:
   Stage: Stage-1
     Spark
       Edges:
-        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 
(PARTITION-LEVEL SORT, 2)
-        Reducer 4 <- Map 3 (GROUP, 2)
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Map 3 (PARTITION-LEVEL 
SORT, 2)
 #### A masked pattern was here ####
       Vertices:
         Map 1 
@@ -628,16 +627,20 @@ STAGE PLANS:
                   Filter Operator
                     predicate: ((key > '9') and value is not null) (type: 
boolean)
                     Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
-                    Group By Operator
-                      keys: key (type: string), value (type: string)
-                      mode: hash
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
                       outputColumnNames: _col0, _col1
                       Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
-                      Reduce Output Operator
-                        key expressions: _col0 (type: string), _col1 (type: 
string)
-                        sort order: ++
-                        Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                      Group By Operator
+                        keys: _col0 (type: string), _col1 (type: string)
+                        mode: hash
+                        outputColumnNames: _col0, _col1
                         Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string), _col1 (type: 
string)
+                          sort order: ++
+                          Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                          Statistics: Num rows: 166 Data size: 1763 Basic 
stats: COMPLETE Column stats: NONE
         Reducer 2 
             Reduce Operator Tree:
               Join Operator
@@ -655,23 +658,6 @@ STAGE PLANS:
                       input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
                       output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                       serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
-        Reducer 4 
-            Reduce Operator Tree:
-              Group By Operator
-                keys: KEY._col0 (type: string), KEY._col1 (type: string)
-                mode: mergepartial
-                outputColumnNames: _col0, _col1
-                Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE 
Column stats: NONE
-                Group By Operator
-                  keys: _col0 (type: string), _col1 (type: string)
-                  mode: hash
-                  outputColumnNames: _col0, _col1
-                  Statistics: Num rows: 83 Data size: 881 Basic stats: 
COMPLETE Column stats: NONE
-                  Reduce Output Operator
-                    key expressions: _col0 (type: string), _col1 (type: string)
-                    sort order: ++
-                    Map-reduce partition columns: _col0 (type: string), _col1 
(type: string)
-                    Statistics: Num rows: 83 Data size: 881 Basic stats: 
COMPLETE Column stats: NONE
 
   Stage: Stage-0
     Fetch Operator
@@ -858,6 +844,643 @@ POSTHOOK: Input: default@src
 97     val_97
 98     val_98
 98     val_98
+Warning: Shuffle Join JOIN[15][tables = [$hdt$_1, $hdt$_2]] in Work 'Reducer 
4' is a cross product
+PREHOOK: query: explain select * from src b where b.key in (select distinct 
key from src a where a.value > b.value)
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from src b where b.key in (select distinct 
key from src a where a.value > b.value)
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Spark
+      Edges:
+        Reducer 2 <- Map 1 (PARTITION-LEVEL SORT, 2), Reducer 4 
(PARTITION-LEVEL SORT, 2)
+        Reducer 4 <- Map 3 (PARTITION-LEVEL SORT, 1), Reducer 6 
(PARTITION-LEVEL SORT, 1)
+        Reducer 6 <- Map 5 (GROUP, 2)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: (key is not null and value is not null) (type: 
boolean)
+                    Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: 
string)
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                        Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                    Select Operator
+                      expressions: key (type: string), value (type: string)
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                      Reduce Output Operator
+                        sort order: 
+                        Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                        value expressions: _col0 (type: string), _col1 (type: 
string)
+        Map 5 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: value is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                    Group By Operator
+                      keys: value (type: string)
+                      mode: hash
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string)
+                        sort order: +
+                        Map-reduce partition columns: _col0 (type: string)
+                        Statistics: Num rows: 500 Data size: 5312 Basic stats: 
COMPLETE Column stats: NONE
+        Reducer 2 
+            Reduce Operator Tree:
+              Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 _col0 (type: string), _col1 (type: string)
+                  1 _col0 (type: string), _col1 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 45832 Data size: 1019683 Basic stats: 
COMPLETE Column stats: NONE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 45832 Data size: 1019683 Basic stats: 
COMPLETE Column stats: NONE
+                  table:
+                      input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+        Reducer 4 
+            Reduce Operator Tree:
+              Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 
+                  1 
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 125000 Data size: 2781000 Basic stats: 
COMPLETE Column stats: NONE
+                Filter Operator
+                  predicate: (_col1 > _col2) (type: boolean)
+                  Statistics: Num rows: 41666 Data size: 926985 Basic stats: 
COMPLETE Column stats: NONE
+                  Select Operator
+                    expressions: _col0 (type: string), _col1 (type: string)
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 41666 Data size: 926985 Basic stats: 
COMPLETE Column stats: NONE
+                    Group By Operator
+                      keys: _col0 (type: string), _col1 (type: string)
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 41666 Data size: 926985 Basic 
stats: COMPLETE Column stats: NONE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: 
string)
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), 
_col1 (type: string)
+                        Statistics: Num rows: 41666 Data size: 926985 Basic 
stats: COMPLETE Column stats: NONE
+        Reducer 6 
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0
+                Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                Reduce Output Operator
+                  sort order: 
+                  Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                  value expressions: _col0 (type: string)
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+Warning: Shuffle Join JOIN[15][tables = [$hdt$_1, $hdt$_2]] in Work 'Reducer 
4' is a cross product
+PREHOOK: query: select * from src b where b.key in (select distinct key from 
src a where a.value > b.value)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: select * from src b where b.key in (select distinct key from 
src a where a.value > b.value)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+10     val_10
+100    val_100
+100    val_100
+103    val_103
+103    val_103
+104    val_104
+104    val_104
+105    val_105
+11     val_11
+111    val_111
+113    val_113
+113    val_113
+114    val_114
+116    val_116
+118    val_118
+118    val_118
+119    val_119
+119    val_119
+119    val_119
+12     val_12
+12     val_12
+120    val_120
+120    val_120
+125    val_125
+125    val_125
+126    val_126
+128    val_128
+128    val_128
+128    val_128
+129    val_129
+129    val_129
+131    val_131
+133    val_133
+134    val_134
+134    val_134
+136    val_136
+137    val_137
+137    val_137
+138    val_138
+138    val_138
+138    val_138
+138    val_138
+143    val_143
+145    val_145
+146    val_146
+146    val_146
+149    val_149
+149    val_149
+15     val_15
+15     val_15
+150    val_150
+152    val_152
+152    val_152
+153    val_153
+155    val_155
+156    val_156
+157    val_157
+158    val_158
+160    val_160
+162    val_162
+163    val_163
+164    val_164
+164    val_164
+165    val_165
+165    val_165
+166    val_166
+167    val_167
+167    val_167
+167    val_167
+168    val_168
+169    val_169
+169    val_169
+169    val_169
+169    val_169
+17     val_17
+170    val_170
+172    val_172
+172    val_172
+174    val_174
+174    val_174
+175    val_175
+175    val_175
+176    val_176
+176    val_176
+177    val_177
+178    val_178
+179    val_179
+179    val_179
+18     val_18
+18     val_18
+180    val_180
+181    val_181
+183    val_183
+186    val_186
+187    val_187
+187    val_187
+187    val_187
+189    val_189
+19     val_19
+190    val_190
+191    val_191
+191    val_191
+192    val_192
+193    val_193
+193    val_193
+193    val_193
+194    val_194
+195    val_195
+195    val_195
+196    val_196
+197    val_197
+197    val_197
+199    val_199
+199    val_199
+199    val_199
+2      val_2
+20     val_20
+200    val_200
+200    val_200
+201    val_201
+202    val_202
+203    val_203
+203    val_203
+205    val_205
+205    val_205
+207    val_207
+207    val_207
+208    val_208
+208    val_208
+208    val_208
+209    val_209
+209    val_209
+213    val_213
+213    val_213
+214    val_214
+216    val_216
+216    val_216
+217    val_217
+217    val_217
+218    val_218
+219    val_219
+219    val_219
+221    val_221
+221    val_221
+222    val_222
+223    val_223
+223    val_223
+224    val_224
+224    val_224
+226    val_226
+228    val_228
+229    val_229
+229    val_229
+230    val_230
+230    val_230
+230    val_230
+230    val_230
+230    val_230
+233    val_233
+233    val_233
+235    val_235
+237    val_237
+237    val_237
+238    val_238
+238    val_238
+239    val_239
+239    val_239
+24     val_24
+24     val_24
+241    val_241
+242    val_242
+242    val_242
+244    val_244
+247    val_247
+248    val_248
+249    val_249
+252    val_252
+255    val_255
+255    val_255
+256    val_256
+256    val_256
+257    val_257
+258    val_258
+26     val_26
+26     val_26
+260    val_260
+262    val_262
+263    val_263
+265    val_265
+265    val_265
+266    val_266
+27     val_27
+272    val_272
+272    val_272
+273    val_273
+273    val_273
+273    val_273
+274    val_274
+275    val_275
+277    val_277
+277    val_277
+277    val_277
+277    val_277
+278    val_278
+278    val_278
+28     val_28
+280    val_280
+280    val_280
+281    val_281
+281    val_281
+282    val_282
+282    val_282
+283    val_283
+284    val_284
+285    val_285
+286    val_286
+287    val_287
+288    val_288
+288    val_288
+289    val_289
+291    val_291
+292    val_292
+296    val_296
+298    val_298
+298    val_298
+298    val_298
+30     val_30
+302    val_302
+305    val_305
+306    val_306
+307    val_307
+307    val_307
+308    val_308
+309    val_309
+309    val_309
+310    val_310
+311    val_311
+311    val_311
+311    val_311
+315    val_315
+316    val_316
+316    val_316
+316    val_316
+317    val_317
+317    val_317
+318    val_318
+318    val_318
+318    val_318
+321    val_321
+321    val_321
+322    val_322
+322    val_322
+323    val_323
+325    val_325
+325    val_325
+327    val_327
+327    val_327
+327    val_327
+33     val_33
+331    val_331
+331    val_331
+332    val_332
+333    val_333
+333    val_333
+335    val_335
+336    val_336
+338    val_338
+339    val_339
+34     val_34
+341    val_341
+342    val_342
+342    val_342
+344    val_344
+344    val_344
+345    val_345
+348    val_348
+348    val_348
+348    val_348
+348    val_348
+348    val_348
+35     val_35
+35     val_35
+35     val_35
+351    val_351
+353    val_353
+353    val_353
+356    val_356
+360    val_360
+362    val_362
+364    val_364
+365    val_365
+366    val_366
+367    val_367
+367    val_367
+368    val_368
+369    val_369
+369    val_369
+369    val_369
+37     val_37
+37     val_37
+373    val_373
+374    val_374
+375    val_375
+377    val_377
+378    val_378
+379    val_379
+382    val_382
+382    val_382
+384    val_384
+384    val_384
+384    val_384
+386    val_386
+389    val_389
+392    val_392
+393    val_393
+394    val_394
+395    val_395
+395    val_395
+396    val_396
+396    val_396
+396    val_396
+397    val_397
+397    val_397
+399    val_399
+399    val_399
+4      val_4
+400    val_400
+401    val_401
+401    val_401
+401    val_401
+401    val_401
+401    val_401
+402    val_402
+403    val_403
+403    val_403
+403    val_403
+404    val_404
+404    val_404
+406    val_406
+406    val_406
+406    val_406
+406    val_406
+407    val_407
+409    val_409
+409    val_409
+409    val_409
+41     val_41
+411    val_411
+413    val_413
+413    val_413
+414    val_414
+414    val_414
+417    val_417
+417    val_417
+417    val_417
+418    val_418
+419    val_419
+42     val_42
+42     val_42
+421    val_421
+424    val_424
+424    val_424
+427    val_427
+429    val_429
+429    val_429
+43     val_43
+430    val_430
+430    val_430
+430    val_430
+431    val_431
+431    val_431
+431    val_431
+432    val_432
+435    val_435
+436    val_436
+437    val_437
+438    val_438
+438    val_438
+438    val_438
+439    val_439
+439    val_439
+44     val_44
+443    val_443
+444    val_444
+446    val_446
+448    val_448
+449    val_449
+452    val_452
+453    val_453
+454    val_454
+454    val_454
+454    val_454
+455    val_455
+457    val_457
+458    val_458
+458    val_458
+459    val_459
+459    val_459
+460    val_460
+462    val_462
+462    val_462
+463    val_463
+463    val_463
+466    val_466
+466    val_466
+466    val_466
+467    val_467
+468    val_468
+468    val_468
+468    val_468
+468    val_468
+469    val_469
+469    val_469
+469    val_469
+469    val_469
+469    val_469
+47     val_47
+470    val_470
+472    val_472
+475    val_475
+477    val_477
+478    val_478
+478    val_478
+479    val_479
+480    val_480
+480    val_480
+480    val_480
+481    val_481
+482    val_482
+483    val_483
+484    val_484
+485    val_485
+487    val_487
+489    val_489
+489    val_489
+489    val_489
+489    val_489
+490    val_490
+491    val_491
+492    val_492
+492    val_492
+493    val_493
+494    val_494
+495    val_495
+496    val_496
+497    val_497
+498    val_498
+498    val_498
+498    val_498
+5      val_5
+5      val_5
+5      val_5
+51     val_51
+51     val_51
+53     val_53
+54     val_54
+57     val_57
+58     val_58
+58     val_58
+64     val_64
+65     val_65
+66     val_66
+67     val_67
+67     val_67
+69     val_69
+70     val_70
+70     val_70
+70     val_70
+72     val_72
+72     val_72
+74     val_74
+76     val_76
+76     val_76
+77     val_77
+78     val_78
+8      val_8
+80     val_80
+82     val_82
+83     val_83
+83     val_83
+84     val_84
+84     val_84
+85     val_85
+86     val_86
+87     val_87
+9      val_9
+90     val_90
+90     val_90
+90     val_90
+92     val_92
+95     val_95
+95     val_95
+96     val_96
+97     val_97
+97     val_97
+98     val_98
+98     val_98
 PREHOOK: query: select p_mfgr, p_name, p_size 
 from part 
 where part.p_size in 

http://git-wip-us.apache.org/repos/asf/hive/blob/c2be4b71/ql/src/test/results/clientpositive/subquery_unqualcolumnrefs.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/subquery_unqualcolumnrefs.q.out 
b/ql/src/test/results/clientpositive/subquery_unqualcolumnrefs.q.out
index 79b7d83..bb9faa8 100644
--- a/ql/src/test/results/clientpositive/subquery_unqualcolumnrefs.q.out
+++ b/ql/src/test/results/clientpositive/subquery_unqualcolumnrefs.q.out
@@ -193,23 +193,21 @@ where b.key in
         )
 POSTHOOK: type: QUERY
 STAGE DEPENDENCIES:
-  Stage-2 is a root stage
-  Stage-1 depends on stages: Stage-2
+  Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
 
 STAGE PLANS:
-  Stage: Stage-2
+  Stage: Stage-1
     Map Reduce
       Map Operator Tree:
           TableScan
-            alias: src
+            alias: b
             Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
             Filter Operator
               predicate: ((key > '9') and value is not null) (type: boolean)
               Statistics: Num rows: 166 Data size: 1763 Basic stats: COMPLETE 
Column stats: NONE
-              Group By Operator
-                keys: key (type: string), value (type: string)
-                mode: hash
+              Select Operator
+                expressions: key (type: string), value (type: string)
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
                 Reduce Output Operator
@@ -217,29 +215,8 @@ STAGE PLANS:
                   sort order: ++
                   Map-reduce partition columns: _col0 (type: string), _col1 
(type: string)
                   Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
-      Reduce Operator Tree:
-        Group By Operator
-          keys: KEY._col0 (type: string), KEY._col1 (type: string)
-          mode: mergepartial
-          outputColumnNames: _col0, _col1
-          Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column 
stats: NONE
-          Group By Operator
-            keys: _col0 (type: string), _col1 (type: string)
-            mode: hash
-            outputColumnNames: _col0, _col1
-            Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE 
Column stats: NONE
-            File Output Operator
-              compressed: false
-              table:
-                  input format: 
org.apache.hadoop.mapred.SequenceFileInputFormat
-                  output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
-                  serde: 
org.apache.hadoop.hive.serde2.lazybinary.LazyBinarySerDe
-
-  Stage: Stage-1
-    Map Reduce
-      Map Operator Tree:
           TableScan
-            alias: b
+            alias: src
             Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
             Filter Operator
               predicate: ((key > '9') and value is not null) (type: boolean)
@@ -248,17 +225,16 @@ STAGE PLANS:
                 expressions: key (type: string), value (type: string)
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
-                Reduce Output Operator
-                  key expressions: _col0 (type: string), _col1 (type: string)
-                  sort order: ++
-                  Map-reduce partition columns: _col0 (type: string), _col1 
(type: string)
+                Group By Operator
+                  keys: _col0 (type: string), _col1 (type: string)
+                  mode: hash
+                  outputColumnNames: _col0, _col1
                   Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
-          TableScan
-            Reduce Output Operator
-              key expressions: _col0 (type: string), _col1 (type: string)
-              sort order: ++
-              Map-reduce partition columns: _col0 (type: string), _col1 (type: 
string)
-              Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: string), _col1 (type: string)
+                    sort order: ++
+                    Map-reduce partition columns: _col0 (type: string), _col1 
(type: string)
+                    Statistics: Num rows: 166 Data size: 1763 Basic stats: 
COMPLETE Column stats: NONE
       Reduce Operator Tree:
         Join Operator
           condition map:

Reply via email to