HIVE-13082: Enable constant propagation optimization in query with left semi 
join (Chaoyu Tang, reviewed by Aihua Xu, Gopal V)


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

Branch: refs/heads/branch-1
Commit: 8e79e2acb009c1b80780a1b49b8290ac70cccdf0
Parents: 0596951
Author: ctang <[email protected]>
Authored: Mon Feb 22 19:07:51 2016 -0500
Committer: ctang <[email protected]>
Committed: Mon Feb 22 19:07:51 2016 -0500

----------------------------------------------------------------------
 .../test/resources/testconfiguration.properties |   2 +
 .../optimizer/ConstantPropagateProcFactory.java |   3 +-
 .../queries/clientpositive/constprog_semijoin.q |  34 +
 .../clientpositive/constprog_partitioner.q.out  |   8 +-
 .../clientpositive/constprog_semijoin.q.out     | 818 ++++++++++++++++++
 .../spark/constprog_partitioner.q.out           |   4 +-
 .../spark/constprog_semijoin.q.out              | 827 ++++++++++++++++++
 .../spark/vector_mapjoin_reduce.q.out           |   6 +-
 .../tez/constprog_partitioner.q.out             | 201 +++++
 .../clientpositive/tez/constprog_semijoin.q.out | 866 +++++++++++++++++++
 .../clientpositive/tez/explainuser_1.q.out      |  12 +-
 .../tez/vector_mapjoin_reduce.q.out             |   6 +-
 .../clientpositive/vector_mapjoin_reduce.q.out  |   8 +-
 13 files changed, 2772 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties 
b/itests/src/test/resources/testconfiguration.properties
index 6b2d794..8159cff 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -82,6 +82,7 @@ minitez.query.files.shared=acid_globallimit.q,\
   cbo_union.q,\
   cbo_views.q,\
   cbo_windowing.q,\
+  constprog_semijoin.q,\
   correlationoptimizer1.q,\
   count.q,\
   create_merge_compressed.q,\
@@ -1152,6 +1153,7 @@ miniSparkOnYarn.query.files=auto_sortmerge_join_16.q,\
   bucketmapjoin6.q,\
   bucketmapjoin7.q,\
   constprog_partitioner.q,\
+  constprog_semijoin.q,\
   disable_merge_for_bucketing.q,\
   empty_dir_in_table.q,\
   external_table_with_space_in_location_path.q,\

http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java
index 2e34158..70cdc95 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java
@@ -1143,7 +1143,8 @@ public final class ConstantPropagateProcFactory {
      */
     private boolean skipFolding(JoinDesc joinDesc) {
       for (JoinCondDesc cond : joinDesc.getConds()) {
-        if (cond.getType() == JoinDesc.INNER_JOIN || cond.getType() == 
JoinDesc.UNIQUE_JOIN) {
+        if (cond.getType() == JoinDesc.INNER_JOIN || cond.getType() == 
JoinDesc.UNIQUE_JOIN
+            || cond.getType() == JoinDesc.LEFT_SEMI_JOIN) {
           continue;
         }
         return true;

http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/ql/src/test/queries/clientpositive/constprog_semijoin.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/constprog_semijoin.q 
b/ql/src/test/queries/clientpositive/constprog_semijoin.q
new file mode 100644
index 0000000..34f90a0
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/constprog_semijoin.q
@@ -0,0 +1,34 @@
+set hive.optimize.constant.propagation=true;
+
+create table table1 (id int, val string, val1 string, dimid int);
+insert into table1 (id, val, val1, dimid) values (1, 't1val01', 'val101', 
100), (2, 't1val02', 'val102', 200), (3, 't1val03', 'val103', 103), (3, 
't1val01', 'val104', 100), (2, 't1val05', 'val105', 200), (3, 't1val01', 
'val106', 103), (1, 't1val07', 'val107', 200), (2, 't1val01', 'val108', 200), 
(3, 't1val09', 'val109', 103), (4,'t1val01', 'val110', 200);
+
+create table table2 (id int, val2 string);
+insert into table2 (id, val2) values (1, 't2val201'), (2, 't2val202'), (3, 
't2val203');
+
+create table table3 (id int);
+insert into table3 (id) values (100), (100), (101), (102), (103);
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id where table1.val = 't1val01';
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id where table1.val = 't1val01';
+
+explain select table1.id, table1.val, table2.val2 from table1 inner join 
table2 on table1.val = 't1val01' and table1.id = table2.id left semi join 
table3 on table1.dimid = table3.id;
+select table1.id, table1.val, table2.val2 from table1 inner join table2 on 
table1.val = 't1val01' and table1.id = table2.id left semi join table3 on 
table1.dimid = table3.id;
+
+explain select table1.id, table1.val, table2.val2 from table1 left semi join 
table3 on table1.dimid = table3.id inner join table2 on table1.val = 't1val01' 
and table1.id = table2.id;
+select table1.id, table1.val, table2.val2 from table1 left semi join table3 on 
table1.dimid = table3.id inner join table2 on table1.val = 't1val01' and 
table1.id = table2.id;
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id and table3.id = 100 where table1.dimid <> 
100;
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id and table3.id = 100 where table1.dimid <> 100;
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id and table3.id = 100 where table1.dimid  IN 
(100,200);
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id and table3.id = 100 where table1.dimid  IN (100,200);
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id and table3.id = 100 where table1.dimid  = 
200;
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id and table3.id = 100 where table1.dimid  = 200;
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id and table3.id = 100 where table1.dimid  = 
100;
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id and table3.id = 100 where table1.dimid  = 100;
+
+explain select table1.id, table1.val, table1.val1 from table1 left semi join 
table3 on table1.dimid = table3.id and table3.id = 100;
+select table1.id, table1.val, table1.val1 from table1 left semi join table3 on 
table1.dimid = table3.id and table3.id = 100;

http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/ql/src/test/results/clientpositive/constprog_partitioner.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/constprog_partitioner.q.out 
b/ql/src/test/results/clientpositive/constprog_partitioner.q.out
index 6475fa7..c49e9cf 100644
--- a/ql/src/test/results/clientpositive/constprog_partitioner.q.out
+++ b/ql/src/test/results/clientpositive/constprog_partitioner.q.out
@@ -111,13 +111,13 @@ STAGE PLANS:
               predicate: ((l_linenumber = 1) and l_orderkey is not null) 
(type: boolean)
               Statistics: Num rows: 25 Data size: 2999 Basic stats: COMPLETE 
Column stats: NONE
               Select Operator
-                expressions: l_orderkey (type: int), l_partkey (type: int), 
l_suppkey (type: int), 1 (type: int)
-                outputColumnNames: _col0, _col1, _col2, _col3
+                expressions: l_orderkey (type: int), l_partkey (type: int), 
l_suppkey (type: int)
+                outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 25 Data size: 2999 Basic stats: COMPLETE 
Column stats: NONE
                 Reduce Output Operator
-                  key expressions: _col0 (type: int), _col3 (type: int)
+                  key expressions: _col0 (type: int), 1 (type: int)
                   sort order: ++
-                  Map-reduce partition columns: _col0 (type: int), _col3 
(type: int)
+                  Map-reduce partition columns: _col0 (type: int), 1 (type: 
int)
                   Statistics: Num rows: 25 Data size: 2999 Basic stats: 
COMPLETE Column stats: NONE
                   value expressions: _col1 (type: int), _col2 (type: int)
           TableScan

http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/ql/src/test/results/clientpositive/constprog_semijoin.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/constprog_semijoin.q.out 
b/ql/src/test/results/clientpositive/constprog_semijoin.q.out
new file mode 100644
index 0000000..a34400a
--- /dev/null
+++ b/ql/src/test/results/clientpositive/constprog_semijoin.q.out
@@ -0,0 +1,818 @@
+PREHOOK: query: create table table1 (id int, val string, val1 string, dimid 
int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@table1
+POSTHOOK: query: create table table1 (id int, val string, val1 string, dimid 
int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@table1
+PREHOOK: query: insert into table1 (id, val, val1, dimid) values (1, 
't1val01', 'val101', 100), (2, 't1val02', 'val102', 200), (3, 't1val03', 
'val103', 103), (3, 't1val01', 'val104', 100), (2, 't1val05', 'val105', 200), 
(3, 't1val01', 'val106', 103), (1, 't1val07', 'val107', 200), (2, 't1val01', 
'val108', 200), (3, 't1val09', 'val109', 103), (4,'t1val01', 'val110', 200)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@values__tmp__table__1
+PREHOOK: Output: default@table1
+POSTHOOK: query: insert into table1 (id, val, val1, dimid) values (1, 
't1val01', 'val101', 100), (2, 't1val02', 'val102', 200), (3, 't1val03', 
'val103', 103), (3, 't1val01', 'val104', 100), (2, 't1val05', 'val105', 200), 
(3, 't1val01', 'val106', 103), (1, 't1val07', 'val107', 200), (2, 't1val01', 
'val108', 200), (3, 't1val09', 'val109', 103), (4,'t1val01', 'val110', 200)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@values__tmp__table__1
+POSTHOOK: Output: default@table1
+POSTHOOK: Lineage: table1.dimid EXPRESSION 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col4, 
type:string, comment:), ]
+POSTHOOK: Lineage: table1.id EXPRESSION 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, 
type:string, comment:), ]
+POSTHOOK: Lineage: table1.val SIMPLE 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, 
type:string, comment:), ]
+POSTHOOK: Lineage: table1.val1 SIMPLE 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, 
type:string, comment:), ]
+PREHOOK: query: create table table2 (id int, val2 string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@table2
+POSTHOOK: query: create table table2 (id int, val2 string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@table2
+PREHOOK: query: insert into table2 (id, val2) values (1, 't2val201'), (2, 
't2val202'), (3, 't2val203')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@values__tmp__table__2
+PREHOOK: Output: default@table2
+POSTHOOK: query: insert into table2 (id, val2) values (1, 't2val201'), (2, 
't2val202'), (3, 't2val203')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@values__tmp__table__2
+POSTHOOK: Output: default@table2
+POSTHOOK: Lineage: table2.id EXPRESSION 
[(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, 
type:string, comment:), ]
+POSTHOOK: Lineage: table2.val2 SIMPLE 
[(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, 
type:string, comment:), ]
+PREHOOK: query: create table table3 (id int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@table3
+POSTHOOK: query: create table table3 (id int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@table3
+PREHOOK: query: insert into table3 (id) values (100), (100), (101), (102), 
(103)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@values__tmp__table__3
+PREHOOK: Output: default@table3
+POSTHOOK: query: insert into table3 (id) values (100), (100), (101), (102), 
(103)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@values__tmp__table__3
+POSTHOOK: Output: default@table3
+POSTHOOK: Lineage: table3.id EXPRESSION 
[(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col1, 
type:string, comment:), ]
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id where table1.val = 't1val01'
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id where table1.val = 't1val01'
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: ((val = 't1val01') and dimid is not null) (type: 
boolean)
+              Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val1 (type: string), dimid (type: 
int)
+                outputColumnNames: _col0, _col2, _col3
+                Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: _col3 (type: int)
+                  sort order: +
+                  Map-reduce partition columns: _col3 (type: int)
+                  Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+                  value expressions: _col0 (type: int), _col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int)
+                outputColumnNames: _col0
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Group By Operator
+                  keys: _col0 (type: int)
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: int)
+                    sort order: +
+                    Map-reduce partition columns: _col0 (type: int)
+                    Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int)
+            1 _col0 (type: int)
+          outputColumnNames: _col0, _col2
+          Statistics: Num rows: 3 Data size: 66 Basic stats: COMPLETE Column 
stats: NONE
+          Select Operator
+            expressions: _col0 (type: int), 't1val01' (type: string), _col2 
(type: string)
+            outputColumnNames: _col0, _col1, _col2
+            Statistics: Num rows: 3 Data size: 66 Basic stats: COMPLETE Column 
stats: NONE
+            File Output Operator
+              compressed: false
+              Statistics: Num rows: 3 Data size: 66 Basic stats: COMPLETE 
Column stats: NONE
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id where table1.val = 't1val01'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id where table1.val = 't1val01'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+3      t1val01 val104
+1      t1val01 val101
+3      t1val01 val106
+PREHOOK: query: explain select table1.id, table1.val, table2.val2 from table1 
inner join table2 on table1.val = 't1val01' and table1.id = table2.id left semi 
join table3 on table1.dimid = table3.id
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table2.val2 from table1 
inner join table2 on table1.val = 't1val01' and table1.id = table2.id left semi 
join table3 on table1.dimid = table3.id
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (((val = 't1val01') and id is not null) and dimid is 
not null) (type: boolean)
+              Statistics: Num rows: 2 Data size: 40 Basic stats: COMPLETE 
Column stats: NONE
+              Reduce Output Operator
+                key expressions: id (type: int)
+                sort order: +
+                Map-reduce partition columns: id (type: int)
+                Statistics: Num rows: 2 Data size: 40 Basic stats: COMPLETE 
Column stats: NONE
+                value expressions: dimid (type: int)
+          TableScan
+            alias: table2
+            Statistics: Num rows: 3 Data size: 30 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 2 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+              Reduce Output Operator
+                key expressions: id (type: int)
+                sort order: +
+                Map-reduce partition columns: id (type: int)
+                Statistics: Num rows: 2 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+                value expressions: val2 (type: string)
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Inner Join 0 to 1
+          keys:
+            0 id (type: int)
+            1 id (type: int)
+          outputColumnNames: _col0, _col3, _col8
+          Statistics: Num rows: 2 Data size: 44 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-2
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            Reduce Output Operator
+              key expressions: _col3 (type: int)
+              sort order: +
+              Map-reduce partition columns: _col3 (type: int)
+              Statistics: Num rows: 2 Data size: 44 Basic stats: COMPLETE 
Column stats: NONE
+              value expressions: _col0 (type: int), _col8 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int)
+                outputColumnNames: id
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Group By Operator
+                  keys: id (type: int)
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: int)
+                    sort order: +
+                    Map-reduce partition columns: _col0 (type: int)
+                    Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int)
+            1 _col0 (type: int)
+          outputColumnNames: _col0, _col8
+          Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE Column 
stats: NONE
+          Select Operator
+            expressions: _col0 (type: int), 't1val01' (type: string), _col8 
(type: string)
+            outputColumnNames: _col0, _col1, _col2
+            Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE Column 
stats: NONE
+            File Output Operator
+              compressed: false
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table2.val2 from table1 inner 
join table2 on table1.val = 't1val01' and table1.id = table2.id left semi join 
table3 on table1.dimid = table3.id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table2
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table2.val2 from table1 inner 
join table2 on table1.val = 't1val01' and table1.id = table2.id left semi join 
table3 on table1.dimid = table3.id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table2
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+3      t1val01 t2val203
+1      t1val01 t2val201
+3      t1val01 t2val203
+PREHOOK: query: explain select table1.id, table1.val, table2.val2 from table1 
left semi join table3 on table1.dimid = table3.id inner join table2 on 
table1.val = 't1val01' and table1.id = table2.id
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table2.val2 from table1 
left semi join table3 on table1.dimid = table3.id inner join table2 on 
table1.val = 't1val01' and table1.id = table2.id
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: ((dimid is not null and (val = 't1val01')) and id is 
not null) (type: boolean)
+              Statistics: Num rows: 1 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+              Reduce Output Operator
+                key expressions: dimid (type: int)
+                sort order: +
+                Map-reduce partition columns: dimid (type: int)
+                Statistics: Num rows: 1 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+                value expressions: id (type: int)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int)
+                outputColumnNames: id
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Group By Operator
+                  keys: id (type: int)
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: int)
+                    sort order: +
+                    Map-reduce partition columns: _col0 (type: int)
+                    Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 dimid (type: int)
+            1 _col0 (type: int)
+          outputColumnNames: _col0
+          Statistics: Num rows: 3 Data size: 9 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-2
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            Reduce Output Operator
+              key expressions: _col0 (type: int)
+              sort order: +
+              Map-reduce partition columns: _col0 (type: int)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+          TableScan
+            alias: table2
+            Statistics: Num rows: 3 Data size: 30 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 2 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+              Reduce Output Operator
+                key expressions: id (type: int)
+                sort order: +
+                Map-reduce partition columns: id (type: int)
+                Statistics: Num rows: 2 Data size: 20 Basic stats: COMPLETE 
Column stats: NONE
+                value expressions: val2 (type: string)
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Inner Join 0 to 1
+          keys:
+            0 _col0 (type: int)
+            1 id (type: int)
+          outputColumnNames: _col0, _col8
+          Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE Column 
stats: NONE
+          Select Operator
+            expressions: _col0 (type: int), 't1val01' (type: string), _col8 
(type: string)
+            outputColumnNames: _col0, _col1, _col2
+            Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE Column 
stats: NONE
+            File Output Operator
+              compressed: false
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              table:
+                  input format: org.apache.hadoop.mapred.TextInputFormat
+                  output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table2.val2 from table1 left 
semi join table3 on table1.dimid = table3.id inner join table2 on table1.val = 
't1val01' and table1.id = table2.id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table2
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table2.val2 from table1 left 
semi join table3 on table1.dimid = table3.id inner join table2 on table1.val = 
't1val01' and table1.id = table2.id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table2
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+1      t1val01 t2val201
+3      t1val01 t2val203
+3      t1val01 t2val203
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid <> 100
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid <> 100
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (dimid <> 100) (type: boolean)
+              Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val (type: string), val1 (type: 
string), dimid (type: int)
+                outputColumnNames: _col0, _col1, _col2, _col3
+                Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: _col3 (type: int), true (type: boolean)
+                  sort order: ++
+                  Map-reduce partition columns: _col3 (type: int), true (type: 
boolean)
+                  Statistics: Num rows: 10 Data size: 200 Basic stats: 
COMPLETE Column stats: NONE
+                  value expressions: _col0 (type: int), _col1 (type: string), 
_col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), (id = 100) (type: boolean)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Filter Operator
+                  predicate: _col1 is not null (type: boolean)
+                  Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                  Group By Operator
+                    keys: _col0 (type: int), _col1 (type: boolean)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: int), _col1 (type: boolean)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: int), _col1 
(type: boolean)
+                      Statistics: Num rows: 2 Data size: 6 Basic stats: 
COMPLETE Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int), true (type: boolean)
+            1 _col0 (type: int), _col1 (type: boolean)
+          outputColumnNames: _col0, _col1, _col2
+          Statistics: Num rows: 11 Data size: 220 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 11 Data size: 220 Basic stats: COMPLETE 
Column stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid <> 100
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid <> 100
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  IN (100,200)
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  IN (100,200)
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: ((dimid) IN (100, 200) and dimid is not null) (type: 
boolean)
+              Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val (type: string), val1 (type: 
string), dimid (type: int)
+                outputColumnNames: _col0, _col1, _col2, _col3
+                Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: _col3 (type: int), true (type: boolean)
+                  sort order: ++
+                  Map-reduce partition columns: _col3 (type: int), true (type: 
boolean)
+                  Statistics: Num rows: 3 Data size: 60 Basic stats: COMPLETE 
Column stats: NONE
+                  value expressions: _col0 (type: int), _col1 (type: string), 
_col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), (id = 100) (type: boolean)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Filter Operator
+                  predicate: _col1 is not null (type: boolean)
+                  Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                  Group By Operator
+                    keys: _col0 (type: int), _col1 (type: boolean)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: int), _col1 (type: boolean)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: int), _col1 
(type: boolean)
+                      Statistics: Num rows: 2 Data size: 6 Basic stats: 
COMPLETE Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int), true (type: boolean)
+            1 _col0 (type: int), _col1 (type: boolean)
+          outputColumnNames: _col0, _col1, _col2
+          Statistics: Num rows: 3 Data size: 66 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 3 Data size: 66 Basic stats: COMPLETE Column 
stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  IN (100,200)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  IN (100,200)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+3      t1val01 val104
+1      t1val01 val101
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 200
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 200
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (dimid = 200) (type: boolean)
+              Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val (type: string), val1 (type: 
string)
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: 200 (type: int), true (type: boolean)
+                  sort order: ++
+                  Map-reduce partition columns: 200 (type: int), true (type: 
boolean)
+                  Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                  value expressions: _col0 (type: int), _col1 (type: string), 
_col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), (id = 100) (type: boolean)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Filter Operator
+                  predicate: _col1 is not null (type: boolean)
+                  Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                  Group By Operator
+                    keys: _col0 (type: int), _col1 (type: boolean)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: int), _col1 (type: boolean)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: int), _col1 
(type: boolean)
+                      Statistics: Num rows: 2 Data size: 6 Basic stats: 
COMPLETE Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int), true (type: boolean)
+            1 _col0 (type: int), _col1 (type: boolean)
+          outputColumnNames: _col0, _col1, _col2
+          Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE 
Column stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 200
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 200
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 100
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 100
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (dimid = 100) (type: boolean)
+              Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val (type: string), val1 (type: 
string)
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: 100 (type: int), true (type: boolean)
+                  sort order: ++
+                  Map-reduce partition columns: 100 (type: int), true (type: 
boolean)
+                  Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                  value expressions: _col0 (type: int), _col1 (type: string), 
_col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), (id = 100) (type: boolean)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Filter Operator
+                  predicate: _col1 is not null (type: boolean)
+                  Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                  Group By Operator
+                    keys: _col0 (type: int), _col1 (type: boolean)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: int), _col1 (type: boolean)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: int), _col1 
(type: boolean)
+                      Statistics: Num rows: 2 Data size: 6 Basic stats: 
COMPLETE Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int), true (type: boolean)
+            1 _col0 (type: int), _col1 (type: boolean)
+          outputColumnNames: _col0, _col1, _col2
+          Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE 
Column stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 100
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100 where 
table1.dimid  = 100
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+3      t1val01 val104
+1      t1val01 val101
+PREHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select table1.id, table1.val, table1.val1 from table1 
left semi join table3 on table1.dimid = table3.id and table3.id = 100
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: table1
+            Statistics: Num rows: 10 Data size: 200 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: dimid is not null (type: boolean)
+              Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), val (type: string), val1 (type: 
string), dimid (type: int)
+                outputColumnNames: _col0, _col1, _col2, _col3
+                Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: _col3 (type: int), true (type: boolean)
+                  sort order: ++
+                  Map-reduce partition columns: _col3 (type: int), true (type: 
boolean)
+                  Statistics: Num rows: 5 Data size: 100 Basic stats: COMPLETE 
Column stats: NONE
+                  value expressions: _col0 (type: int), _col1 (type: string), 
_col2 (type: string)
+          TableScan
+            alias: table3
+            Statistics: Num rows: 5 Data size: 15 Basic stats: COMPLETE Column 
stats: NONE
+            Filter Operator
+              predicate: id is not null (type: boolean)
+              Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: id (type: int), (id = 100) (type: boolean)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 3 Data size: 9 Basic stats: COMPLETE 
Column stats: NONE
+                Filter Operator
+                  predicate: _col1 is not null (type: boolean)
+                  Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                  Group By Operator
+                    keys: _col0 (type: int), _col1 (type: boolean)
+                    mode: hash
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 2 Data size: 6 Basic stats: COMPLETE 
Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: _col0 (type: int), _col1 (type: boolean)
+                      sort order: ++
+                      Map-reduce partition columns: _col0 (type: int), _col1 
(type: boolean)
+                      Statistics: Num rows: 2 Data size: 6 Basic stats: 
COMPLETE Column stats: NONE
+      Reduce Operator Tree:
+        Join Operator
+          condition map:
+               Left Semi Join 0 to 1
+          keys:
+            0 _col3 (type: int), true (type: boolean)
+            1 _col0 (type: int), _col1 (type: boolean)
+          outputColumnNames: _col0, _col1, _col2
+          Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 5 Data size: 110 Basic stats: COMPLETE 
Column stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.TextInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100
+PREHOOK: type: QUERY
+PREHOOK: Input: default@table1
+PREHOOK: Input: default@table3
+#### A masked pattern was here ####
+POSTHOOK: query: select table1.id, table1.val, table1.val1 from table1 left 
semi join table3 on table1.dimid = table3.id and table3.id = 100
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@table1
+POSTHOOK: Input: default@table3
+#### A masked pattern was here ####
+3      t1val01 val104
+1      t1val01 val101

http://git-wip-us.apache.org/repos/asf/hive/blob/8e79e2ac/ql/src/test/results/clientpositive/spark/constprog_partitioner.q.out
----------------------------------------------------------------------
diff --git 
a/ql/src/test/results/clientpositive/spark/constprog_partitioner.q.out 
b/ql/src/test/results/clientpositive/spark/constprog_partitioner.q.out
index 602de6e..f6d66ad 100644
--- a/ql/src/test/results/clientpositive/spark/constprog_partitioner.q.out
+++ b/ql/src/test/results/clientpositive/spark/constprog_partitioner.q.out
@@ -118,9 +118,9 @@ STAGE PLANS:
                     predicate: ((l_orderkey is not null and l_linenumber is 
not null) and (l_linenumber = 1)) (type: boolean)
                     Statistics: Num rows: 12 Data size: 1439 Basic stats: 
COMPLETE Column stats: NONE
                     Reduce Output Operator
-                      key expressions: l_orderkey (type: int), l_linenumber 
(type: int)
+                      key expressions: l_orderkey (type: int), 1 (type: int)
                       sort order: ++
-                      Map-reduce partition columns: l_orderkey (type: int), 
l_linenumber (type: int)
+                      Map-reduce partition columns: l_orderkey (type: int), 1 
(type: int)
                       Statistics: Num rows: 12 Data size: 1439 Basic stats: 
COMPLETE Column stats: NONE
                       value expressions: l_partkey (type: int), l_suppkey 
(type: int)
         Map 3 

Reply via email to