You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2017/04/14 03:31:33 UTC

hive git commit: HIVE-15986 : Support "is [not] distinct from" (Vineet Garg via Ashutosh Chauhan)

Repository: hive
Updated Branches:
  refs/heads/master be59e0244 -> 13d3bebd2


HIVE-15986 : Support "is [not] distinct from" (Vineet Garg via Ashutosh Chauhan)

Signed-off-by: Ashutosh Chauhan <ha...@apache.org>


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

Branch: refs/heads/master
Commit: 13d3bebd251f9406336c163286c959e899aee96c
Parents: be59e02
Author: Vineet Garg <vg...@hortonworks.com>
Authored: Mon Apr 3 17:11:00 2017 -0700
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Thu Apr 13 20:30:58 2017 -0700

----------------------------------------------------------------------
 .../test/resources/testconfiguration.properties |    2 +
 .../translator/SqlFunctionConverter.java        |    1 +
 .../hadoop/hive/ql/parse/IdentifiersParser.g    |   17 +-
 .../hive/ql/parse/TypeCheckProcFactory.java     |    2 +-
 .../queries/clientpositive/is_distinct_from.q   |   46 +
 .../clientpositive/join_is_not_distinct_from.q  |   71 +
 .../clientpositive/llap/is_distinct_from.q.out  |  335 ++++
 .../llap/join_is_not_distinct_from.q.out        | 1673 ++++++++++++++++++
 8 files changed, 2144 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index fb85b9e..df80478 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -501,6 +501,7 @@ minillaplocal.query.files=acid_globallimit.q,\
   groupby2.q,\
   hybridgrace_hashjoin_1.q,\
   hybridgrace_hashjoin_2.q,\
+  is_distinct_from.q,\
   infer_bucket_sort_bucketed_table.q,\
   input16_cc.q,\
   insert_dir_distcp.q,\
@@ -512,6 +513,7 @@ minillaplocal.query.files=acid_globallimit.q,\
   join_max_hashtable.q,\
   join_nulls.q,\
   join_nullsafe.q,\
+  join_is_not_distinct_from.q,\
   leftsemijoin_mr.q,\
   limit_join_transpose.q,\
   lineage2.q,\

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/SqlFunctionConverter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/SqlFunctionConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/SqlFunctionConverter.java
index 85450c9..10f5eb3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/SqlFunctionConverter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/SqlFunctionConverter.java
@@ -352,6 +352,7 @@ public class SqlFunctionConverter {
       registerFunction("struct", SqlStdOperatorTable.ROW, hToken(HiveParser.Identifier, "struct"));
       registerFunction("isnotnull", SqlStdOperatorTable.IS_NOT_NULL, hToken(HiveParser.TOK_ISNOTNULL, "TOK_ISNOTNULL"));
       registerFunction("isnull", SqlStdOperatorTable.IS_NULL, hToken(HiveParser.TOK_ISNULL, "TOK_ISNULL"));
+      registerFunction("is not distinct from", SqlStdOperatorTable.IS_NOT_DISTINCT_FROM, hToken(HiveParser.EQUAL_NS, "<=>"));
       registerFunction("when", SqlStdOperatorTable.CASE, hToken(HiveParser.Identifier, "when"));
       registerDuplicateFunction("case", SqlStdOperatorTable.CASE, hToken(HiveParser.Identifier, "when"));
       // timebased

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
index 8c4ee8a..8598fae 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
@@ -585,14 +585,27 @@ precedenceSimilarExpressionPartNot[CommonTree t]
     precedenceSimilarExpressionAtom[$t]
     ;
 
+precedenceDistinctOperator
+    :
+    KW_IS KW_DISTINCT KW_FROM
+    ;
+
 precedenceEqualOperator
     :
-    EQUAL | EQUAL_NS | NOTEQUAL
+    EQUAL | EQUAL_NS | NOTEQUAL | KW_IS KW_NOT KW_DISTINCT KW_FROM -> EQUAL_NS["<=>"]
     ;
 
 precedenceEqualExpression
     :
-    precedenceSimilarExpression (precedenceEqualOperator^ precedenceSimilarExpression)*
+    (precedenceSimilarExpression -> precedenceSimilarExpression)
+    (
+        equal=precedenceEqualOperator p=precedenceSimilarExpression
+        -> ^($equal {$precedenceEqualExpression.tree} $p)
+        |
+        dist=precedenceDistinctOperator p=precedenceSimilarExpression
+        -> ^(KW_NOT["not"] ^(EQUAL_NS["<=>"] {$precedenceEqualExpression.tree} $p))
+    )*
+    -> {$precedenceEqualExpression.tree}
     ;
     
 precedenceNotOperator

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
index f979c14..8f8eab0 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
@@ -806,7 +806,7 @@ public class TypeCheckProcFactory {
         if (expr.getChildCount() == 1) {
           funcText = specialUnaryOperatorTextHashMap.get(expr.getType());
         }
-        if (funcText == null) {
+        if(funcText == null) {
           funcText = expr.getText();
         }
       } else {

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/test/queries/clientpositive/is_distinct_from.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/is_distinct_from.q b/ql/src/test/queries/clientpositive/is_distinct_from.q
new file mode 100644
index 0000000..b3d9d65
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/is_distinct_from.q
@@ -0,0 +1,46 @@
+explain select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part;
+
+select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part;
+
+explain select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part;
+
+select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part;
+
+create table test(x string, y string);
+insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL);
+select *, x is not distinct from y, not (x is not distinct from y), (x is distinct from y) = true from test;
+
+select *, x||y is not distinct from y||x, not (x||y||x is not distinct from y||x||x) from test;
+
+-- where
+explain select * from test where y is distinct from null;
+select * from test where y is distinct from null;
+
+explain select * from test where y is not distinct from null;
+select * from test where y is not distinct from null;
+drop table test;
+
+-- where
+explain select * from part where p_size is distinct from 2;
+select * from part where p_size is distinct from 2;
+
+explain select * from part where p_size is not distinct from 2;
+select * from part where p_size is not distinct from 2;
+
+

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/test/queries/clientpositive/join_is_not_distinct_from.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/join_is_not_distinct_from.q b/ql/src/test/queries/clientpositive/join_is_not_distinct_from.q
new file mode 100644
index 0000000..ebe832d
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/join_is_not_distinct_from.q
@@ -0,0 +1,71 @@
+set hive.explain.user=false;
+-- SORT_QUERY_RESULTS
+
+CREATE TABLE myinput1(key int, value int);
+LOAD DATA LOCAL INPATH '../../data/files/in8.txt' INTO TABLE myinput1;
+
+-- merging
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value;
+-- SORT_QUERY_RESULTS
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value;
+
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key;
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key;
+
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key;
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key;
+
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.value;
+
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.value;
+
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.value;
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.value;
+
+-- outer joins
+SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key is not distinct from b.value;
+SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key is not distinct from b.value;
+SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key is not distinct from b.value;
+
+-- map joins
+SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value;
+SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value;
+
+CREATE TABLE smb_input(key int, value int);
+LOAD DATA LOCAL INPATH '../../data/files/in4.txt' into table smb_input;
+LOAD DATA LOCAL INPATH '../../data/files/in5.txt' into table smb_input;
+
+
+;
+
+-- smbs
+CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS;
+CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS;
+
+from smb_input
+insert overwrite table smb_input1 select *
+insert overwrite table smb_input2 select *;
+
+SET hive.optimize.bucketmapjoin = true;
+SET hive.optimize.bucketmapjoin.sortedmerge = true;
+SET hive.input.format = org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
+
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key;
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key AND a.value  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key;
+
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value;
+
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value;
+SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value;
+
+--HIVE-3315 join predicate transitive
+explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL;
+select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL;

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/test/results/clientpositive/llap/is_distinct_from.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/is_distinct_from.q.out b/ql/src/test/results/clientpositive/llap/is_distinct_from.q.out
new file mode 100644
index 0000000..d7e1036
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/is_distinct_from.q.out
@@ -0,0 +1,335 @@
+PREHOOK: query: explain select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: part
+          Select Operator
+            expressions: false (type: boolean), true (type: boolean), true (type: boolean), false (type: boolean)
+            outputColumnNames: _col0, _col1, _col2, _col3
+            ListSink
+
+PREHOOK: query: select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select 1 is distinct from 1,
+               1 is distinct from 2,
+               1 is distinct from null,
+               null is distinct from null
+         from part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+false	true	true	false
+PREHOOK: query: explain select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: part
+          Select Operator
+            expressions: true (type: boolean), false (type: boolean), false (type: boolean), true (type: boolean)
+            outputColumnNames: _col0, _col1, _col2, _col3
+            ListSink
+
+PREHOOK: query: select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select 1 is not distinct from 1,
+               1 is not distinct from 2,
+               1 is not distinct from null,
+               null is not distinct from null
+         from part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+true	false	false	true
+PREHOOK: query: create table test(x string, y string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test
+POSTHOOK: query: create table test(x string, y string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test
+PREHOOK: query: insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@test
+POSTHOOK: query: insert into test values ('q', 'q'), ('q', 'w'), (NULL, 'q'), ('q', NULL), (NULL, NULL)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@test
+POSTHOOK: Lineage: test.x SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: test.y SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+PREHOOK: query: select *, x is not distinct from y, not (x is not distinct from y), (x is distinct from y) = true from test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: select *, x is not distinct from y, not (x is not distinct from y), (x is distinct from y) = true from test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+q	q	true	false	false
+q	w	false	true	true
+NULL	q	false	true	true
+q	NULL	false	true	true
+NULL	NULL	true	false	false
+PREHOOK: query: select *, x||y is not distinct from y||x, not (x||y||x is not distinct from y||x||x) from test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: select *, x||y is not distinct from y||x, not (x||y||x is not distinct from y||x||x) from test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+q	q	true	false
+q	w	false	true
+NULL	q	true	false
+q	NULL	true	false
+NULL	NULL	true	false
+PREHOOK: query: explain select * from test where y is distinct from null
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from test where y is distinct from null
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: test
+          Filter Operator
+            predicate: (y <> null) (type: boolean)
+            Select Operator
+              expressions: x (type: string), y (type: string)
+              outputColumnNames: _col0, _col1
+              ListSink
+
+PREHOOK: query: select * from test where y is distinct from null
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: select * from test where y is distinct from null
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+q	q
+q	w
+NULL	q
+PREHOOK: query: explain select * from test where y is not distinct from null
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from test where y is not distinct from null
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: test
+          Filter Operator
+            predicate: (y = null) (type: boolean)
+            Select Operator
+              expressions: x (type: string), y (type: string)
+              outputColumnNames: _col0, _col1
+              ListSink
+
+PREHOOK: query: select * from test where y is not distinct from null
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: select * from test where y is not distinct from null
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+q	NULL
+NULL	NULL
+PREHOOK: query: drop table test
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@test
+PREHOOK: Output: default@test
+POSTHOOK: query: drop table test
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@test
+POSTHOOK: Output: default@test
+PREHOOK: query: explain select * from part where p_size is distinct from 2
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from part where p_size is distinct from 2
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: part
+          Filter Operator
+            predicate: (p_size <> 2) (type: boolean)
+            Select Operator
+              expressions: p_partkey (type: int), p_name (type: string), p_mfgr (type: string), p_brand (type: string), p_type (type: string), p_size (type: int), p_container (type: string), p_retailprice (type: double), p_comment (type: string)
+              outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8
+              ListSink
+
+PREHOOK: query: select * from part where p_size is distinct from 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part where p_size is distinct from 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+85768	almond antique chartreuse lavender yellow	Manufacturer#1	Brand#12	LARGE BRUSHED STEEL	34	SM BAG	1753.76	refull
+110592	almond antique salmon chartreuse burlywood	Manufacturer#1	Brand#15	PROMO BURNISHED NICKEL	6	JUMBO PKG	1602.59	 to the furiously
+86428	almond aquamarine burnished black steel	Manufacturer#1	Brand#12	STANDARD ANODIZED STEEL	28	WRAP BAG	1414.42	arefully 
+65667	almond aquamarine pink moccasin thistle	Manufacturer#1	Brand#12	LARGE BURNISHED STEEL	42	JUMBO CASE	1632.66	e across the expr
+105685	almond antique violet chocolate turquoise	Manufacturer#2	Brand#22	MEDIUM ANODIZED COPPER	14	MED CAN	1690.68	ly pending requ
+191709	almond antique violet turquoise frosted	Manufacturer#2	Brand#22	ECONOMY POLISHED STEEL	40	MED BOX	1800.7	 haggle
+132666	almond aquamarine rose maroon antique	Manufacturer#2	Brand#24	SMALL POLISHED NICKEL	25	MED BOX	1698.66	even 
+195606	almond aquamarine sandy cyan gainsboro	Manufacturer#2	Brand#25	STANDARD PLATED TIN	18	SM PKG	1701.6	ic de
+90681	almond antique chartreuse khaki white	Manufacturer#3	Brand#31	MEDIUM BURNISHED TIN	17	SM CASE	1671.68	are slyly after the sl
+17273	almond antique forest lavender goldenrod	Manufacturer#3	Brand#35	PROMO ANODIZED TIN	14	JUMBO CASE	1190.27	along the
+112398	almond antique metallic orange dim	Manufacturer#3	Brand#32	MEDIUM BURNISHED BRASS	19	JUMBO JAR	1410.39	ole car
+40982	almond antique misty red olive	Manufacturer#3	Brand#32	ECONOMY PLATED COPPER	1	LG PKG	1922.98	c foxes can s
+144293	almond antique olive coral navajo	Manufacturer#3	Brand#34	STANDARD POLISHED STEEL	45	JUMBO CAN	1337.29	ag furiously about 
+49671	almond antique gainsboro frosted violet	Manufacturer#4	Brand#41	SMALL BRUSHED BRASS	10	SM BOX	1620.67	ccounts run quick
+48427	almond antique violet mint lemon	Manufacturer#4	Brand#42	PROMO POLISHED STEEL	39	SM CASE	1375.42	hely ironic i
+45261	almond aquamarine floral ivory bisque	Manufacturer#4	Brand#42	SMALL PLATED STEEL	27	WRAP CASE	1206.26	careful
+17927	almond aquamarine yellow dodger mint	Manufacturer#4	Brand#41	ECONOMY BRUSHED COPPER	7	SM PKG	1844.92	ites. eve
+33357	almond azure aquamarine papaya violet	Manufacturer#4	Brand#41	STANDARD ANODIZED TIN	12	WRAP CASE	1290.35	reful
+192697	almond antique blue firebrick mint	Manufacturer#5	Brand#52	MEDIUM BURNISHED TIN	31	LG DRUM	1789.69	ickly ir
+42669	almond antique medium spring khaki	Manufacturer#5	Brand#51	STANDARD BURNISHED TIN	6	MED CAN	1611.66	sits haggl
+15103	almond aquamarine dodger light gainsboro	Manufacturer#5	Brand#53	ECONOMY BURNISHED STEEL	46	LG PACK	1018.1	packages hinder carefu
+78486	almond azure blanched chiffon midnight	Manufacturer#5	Brand#52	LARGE BRUSHED BRASS	23	MED BAG	1464.48	hely blith
+PREHOOK: query: explain select * from part where p_size is not distinct from 2
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from part where p_size is not distinct from 2
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: part
+          Filter Operator
+            predicate: (p_size = 2) (type: boolean)
+            Select Operator
+              expressions: p_partkey (type: int), p_name (type: string), p_mfgr (type: string), p_brand (type: string), p_type (type: string), 2 (type: int), p_container (type: string), p_retailprice (type: double), p_comment (type: string)
+              outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8
+              ListSink
+
+PREHOOK: query: select * from part where p_size is not distinct from 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part where p_size is not distinct from 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+121152	almond antique burnished rose metallic	Manufacturer#1	Brand#14	PROMO PLATED TIN	2	JUMBO BOX	1173.15	e pinto beans h
+121152	almond antique burnished rose metallic	Manufacturer#1	Brand#14	PROMO PLATED TIN	2	JUMBO BOX	1173.15	e pinto beans h
+146985	almond aquamarine midnight light salmon	Manufacturer#2	Brand#23	MEDIUM BURNISHED COPPER	2	SM CASE	2031.98	s cajole caref
+155733	almond antique sky peru orange	Manufacturer#5	Brand#53	SMALL PLATED BRASS	2	WRAP DRUM	1788.73	furiously. bra

http://git-wip-us.apache.org/repos/asf/hive/blob/13d3bebd/ql/src/test/results/clientpositive/llap/join_is_not_distinct_from.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/join_is_not_distinct_from.q.out b/ql/src/test/results/clientpositive/llap/join_is_not_distinct_from.q.out
new file mode 100644
index 0000000..eaf09ca
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/join_is_not_distinct_from.q.out
@@ -0,0 +1,1673 @@
+PREHOOK: query: CREATE TABLE myinput1(key int, value int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@myinput1
+POSTHOOK: query: CREATE TABLE myinput1(key int, value int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@myinput1
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in8.txt' INTO TABLE myinput1
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@myinput1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in8.txt' INTO TABLE myinput1
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@myinput1
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from 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), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: key (type: int)
+                    sort order: +
+                    Map-reduce partition columns: key (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: value (type: int)
+                    sort order: +
+                    Map-reduce partition columns: value (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    value expressions: key (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 key (type: int)
+                  1 value (type: int)
+                nullSafes: [true]
+                outputColumnNames: _col0, _col1, _col5, _col6
+                Statistics: Num rows: 3 Data size: 28 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: _col0 (type: int), _col1 (type: int), _col5 (type: int), _col6 (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3
+                  Statistics: Num rows: 3 Data size: 28 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 3 Data size: 28 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key
+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), Map 3 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: key (type: int)
+                      sort order: +
+                      Map-reduce partition columns: key (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                      value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: value is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: value (type: int)
+                      sort order: +
+                      Map-reduce partition columns: value (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                      value expressions: key (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: c
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: key (type: int)
+                      sort order: +
+                      Map-reduce partition columns: key (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                      value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                     Inner Join 0 to 2
+                keys:
+                  0 key (type: int)
+                  1 value (type: int)
+                  2 key (type: int)
+                outputColumnNames: _col0, _col1, _col5, _col6, _col10, _col11
+                Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: _col0 (type: int), _col1 (type: int), _col5 (type: int), _col6 (type: int), _col10 (type: int), _col11 (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+                  Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 6 Data size: 57 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key=c.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10	10	NULL
+100	100	100	100	100	100
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key
+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), Map 3 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: key (type: int)
+                    sort order: +
+                    Map-reduce partition columns: key (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: value (type: int)
+                    sort order: +
+                    Map-reduce partition columns: value (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    value expressions: key (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: c
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: key (type: int)
+                    sort order: +
+                    Map-reduce partition columns: key (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                     Inner Join 0 to 2
+                keys:
+                  0 key (type: int)
+                  1 value (type: int)
+                  2 key (type: int)
+                nullSafes: [true]
+                outputColumnNames: _col0, _col1, _col5, _col6, _col10, _col11
+                Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: _col0 (type: int), _col1 (type: int), _col5 (type: int), _col6 (type: int), _col10 (type: int), _col11 (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+                  Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 6 Data size: 57 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value join myinput1 c on a.key is not distinct from c.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10	10	NULL
+100	100	100	100	100	100
+NULL	10	10	NULL	NULL	10
+NULL	10	10	NULL	NULL	35
+NULL	10	10	NULL	NULL	NULL
+NULL	10	48	NULL	NULL	10
+NULL	10	48	NULL	NULL	35
+NULL	10	48	NULL	NULL	NULL
+NULL	10	NULL	NULL	NULL	10
+NULL	10	NULL	NULL	NULL	35
+NULL	10	NULL	NULL	NULL	NULL
+NULL	35	10	NULL	NULL	10
+NULL	35	10	NULL	NULL	35
+NULL	35	10	NULL	NULL	NULL
+NULL	35	48	NULL	NULL	10
+NULL	35	48	NULL	NULL	35
+NULL	35	48	NULL	NULL	NULL
+NULL	35	NULL	NULL	NULL	10
+NULL	35	NULL	NULL	NULL	35
+NULL	35	NULL	NULL	NULL	NULL
+NULL	NULL	10	NULL	NULL	10
+NULL	NULL	10	NULL	NULL	35
+NULL	NULL	10	NULL	NULL	NULL
+NULL	NULL	48	NULL	NULL	10
+NULL	NULL	48	NULL	NULL	35
+NULL	NULL	48	NULL	NULL	NULL
+NULL	NULL	NULL	NULL	NULL	10
+NULL	NULL	NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL	NULL	NULL
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.value
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.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), Map 3 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: value is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: key (type: int), value (type: int)
+                      sort order: ++
+                      Map-reduce partition columns: key (type: int), value (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: value (type: int), key (type: int)
+                      sort order: ++
+                      Map-reduce partition columns: value (type: int), key (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: c
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: value is not null (type: boolean)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: key (type: int), value (type: int)
+                      sort order: ++
+                      Map-reduce partition columns: key (type: int), value (type: int)
+                      Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                     Inner Join 0 to 2
+                keys:
+                  0 key (type: int), value (type: int)
+                  1 value (type: int), key (type: int)
+                  2 key (type: int), value (type: int)
+                nullSafes: [true, false]
+                outputColumnNames: _col0, _col1, _col5, _col6, _col10, _col11
+                Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: _col0 (type: int), _col1 (type: int), _col5 (type: int), _col6 (type: int), _col10 (type: int), _col11 (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+                  Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 6 Data size: 57 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value=b.key join myinput1 c on a.key is not distinct from c.key AND a.value=c.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+100	100	100	100	100	100
+NULL	10	10	NULL	NULL	10
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.value
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.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), Map 3 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: key (type: int), value (type: int)
+                    sort order: ++
+                    Map-reduce partition columns: key (type: int), value (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: value (type: int), key (type: int)
+                    sort order: ++
+                    Map-reduce partition columns: value (type: int), key (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: c
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Reduce Output Operator
+                    key expressions: key (type: int), value (type: int)
+                    sort order: ++
+                    Map-reduce partition columns: key (type: int), value (type: int)
+                    Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                     Inner Join 0 to 2
+                keys:
+                  0 key (type: int), value (type: int)
+                  1 value (type: int), key (type: int)
+                  2 key (type: int), value (type: int)
+                nullSafes: [true, true]
+                outputColumnNames: _col0, _col1, _col5, _col6, _col10, _col11
+                Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: _col0 (type: int), _col1 (type: int), _col5 (type: int), _col6 (type: int), _col10 (type: int), _col11 (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+                  Statistics: Num rows: 6 Data size: 57 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 6 Data size: 57 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.value is not distinct from b.key join myinput1 c on a.key is not distinct from c.key AND a.value is not distinct from c.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10	10	NULL
+100	100	100	100	100	100
+NULL	10	10	NULL	NULL	10
+NULL	NULL	NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+48	NULL	NULL	NULL
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+48	NULL	NULL	NULL
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key is not distinct from b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+10	NULL	NULL	10
+100	100	100	100
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: CREATE TABLE smb_input(key int, value int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@smb_input
+POSTHOOK: query: CREATE TABLE smb_input(key int, value int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@smb_input
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in4.txt' into table smb_input
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@smb_input
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in4.txt' into table smb_input
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@smb_input
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in5.txt' into table smb_input
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@smb_input
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/in5.txt' into table smb_input
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@smb_input
+PREHOOK: query: CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@smb_input1
+POSTHOOK: query: CREATE TABLE smb_input1(key int, value int) CLUSTERED BY (key) SORTED BY (key) INTO 2 BUCKETS
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@smb_input1
+PREHOOK: query: CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@smb_input2
+POSTHOOK: query: CREATE TABLE smb_input2(key int, value int) CLUSTERED BY (value) SORTED BY (value) INTO 2 BUCKETS
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@smb_input2
+PREHOOK: query: from smb_input
+insert overwrite table smb_input1 select *
+insert overwrite table smb_input2 select *
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input
+PREHOOK: Output: default@smb_input1
+PREHOOK: Output: default@smb_input2
+POSTHOOK: query: from smb_input
+insert overwrite table smb_input1 select *
+insert overwrite table smb_input2 select *
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input
+POSTHOOK: Output: default@smb_input1
+POSTHOOK: Output: default@smb_input2
+POSTHOOK: Lineage: smb_input1.key SIMPLE [(smb_input)smb_input.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: smb_input1.value SIMPLE [(smb_input)smb_input.FieldSchema(name:value, type:int, comment:null), ]
+POSTHOOK: Lineage: smb_input2.key SIMPLE [(smb_input)smb_input.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: smb_input2.value SIMPLE [(smb_input)smb_input.FieldSchema(name:value, type:int, comment:null), ]
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	1000
+10	100	10	1000
+10	1000	10	100
+10	1000	10	100
+10	1000	10	1000
+100	100	100	100
+12	100	12	100
+12	100	12	NULL
+12	NULL	12	100
+12	NULL	12	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	NULL	10050
+NULL	10050	NULL	35
+NULL	10050	NULL	NULL
+NULL	35	NULL	10050
+NULL	35	NULL	35
+NULL	35	NULL	NULL
+NULL	NULL	NULL	10050
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key AND a.value  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key AND a.value  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	1000	10	1000
+100	100	100	100
+12	100	12	100
+12	NULL	12	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	NULL	10050
+NULL	35	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	1000
+10	100	10	1000
+10	1000	10	100
+10	1000	10	100
+10	1000	10	1000
+100	100	100	100
+12	100	12	100
+12	100	12	NULL
+12	NULL	12	100
+12	NULL	12	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	NULL	10050
+NULL	10050	NULL	35
+NULL	10050	NULL	NULL
+NULL	35	NULL	10050
+NULL	35	NULL	35
+NULL	35	NULL	NULL
+NULL	NULL	NULL	10050
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input1 b ON a.key  is not distinct from  b.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	1000
+10	100	10	1000
+10	1000	10	100
+10	1000	10	100
+10	1000	10	1000
+100	100	100	100
+12	100	12	100
+12	100	12	NULL
+12	NULL	12	100
+12	NULL	12	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	NULL	10050
+NULL	10050	NULL	35
+NULL	10050	NULL	NULL
+NULL	35	NULL	10050
+NULL	35	NULL	35
+NULL	35	NULL	NULL
+NULL	NULL	NULL	10050
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input1 b ON a.key  is not distinct from  b.key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	1000
+10	100	10	1000
+10	1000	10	100
+10	1000	10	100
+10	1000	10	1000
+100	100	100	100
+12	100	12	100
+12	100	12	NULL
+12	NULL	12	100
+12	NULL	12	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	NULL	10050
+NULL	10050	NULL	35
+NULL	10050	NULL	NULL
+NULL	35	NULL	10050
+NULL	35	NULL	35
+NULL	35	NULL	NULL
+NULL	NULL	NULL	10050
+NULL	NULL	NULL	35
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+35	10035	NULL	35
+NULL	10050	12	NULL
+NULL	10050	NULL	NULL
+NULL	35	12	NULL
+NULL	35	NULL	NULL
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a JOIN smb_input2 b ON a.key  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+35	10035	NULL	35
+NULL	10050	12	NULL
+NULL	10050	NULL	NULL
+NULL	35	12	NULL
+NULL	35	NULL	NULL
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input1 a LEFT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+10	100	NULL	NULL
+10	100	NULL	NULL
+10	1000	NULL	NULL
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+12	100	NULL	NULL
+12	NULL	NULL	NULL
+15	10015	NULL	NULL
+20	10020	NULL	NULL
+25	10025	NULL	NULL
+30	10030	NULL	NULL
+35	10035	NULL	35
+40	10040	NULL	NULL
+40	10040	NULL	NULL
+5	10005	NULL	NULL
+50	10050	NULL	NULL
+50	10050	NULL	NULL
+50	10050	NULL	NULL
+60	10040	NULL	NULL
+60	10040	NULL	NULL
+70	10040	NULL	NULL
+70	10040	NULL	NULL
+80	10040	NULL	NULL
+80	10040	NULL	NULL
+NULL	10050	12	NULL
+NULL	10050	NULL	NULL
+NULL	35	12	NULL
+NULL	35	NULL	NULL
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input1
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input1 a RIGHT OUTER JOIN smb_input2 b ON a.key  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input1
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+35	10035	NULL	35
+NULL	10050	12	NULL
+NULL	10050	NULL	NULL
+NULL	35	12	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	1000
+NULL	NULL	12	NULL
+NULL	NULL	15	10015
+NULL	NULL	20	10020
+NULL	NULL	25	10025
+NULL	NULL	30	10030
+NULL	NULL	35	10035
+NULL	NULL	40	10040
+NULL	NULL	40	10040
+NULL	NULL	5	10005
+NULL	NULL	50	10050
+NULL	NULL	50	10050
+NULL	NULL	50	10050
+NULL	NULL	60	10040
+NULL	NULL	60	10040
+NULL	NULL	70	10040
+NULL	NULL	70	10040
+NULL	NULL	80	10040
+NULL	NULL	80	10040
+NULL	NULL	NULL	10050
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	100	100
+10	100	100	100
+10	100	12	100
+10	100	12	100
+10	1000	10	1000
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+12	100	10	100
+12	100	10	100
+12	100	100	100
+12	100	12	100
+12	NULL	12	NULL
+12	NULL	NULL	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	NULL	10050
+NULL	35	NULL	35
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM smb_input2 a RIGHT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	100	100
+10	100	100	100
+10	100	12	100
+10	100	12	100
+10	1000	10	1000
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+12	100	10	100
+12	100	10	100
+12	100	100	100
+12	100	12	100
+12	NULL	12	NULL
+12	NULL	NULL	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	NULL	10050
+NULL	35	NULL	35
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a JOIN smb_input2 b ON a.value  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	100	100
+10	100	100	100
+10	100	12	100
+10	100	12	100
+10	1000	10	1000
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+12	100	10	100
+12	100	10	100
+12	100	100	100
+12	100	12	100
+12	NULL	12	NULL
+12	NULL	NULL	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	NULL	10050
+NULL	35	NULL	35
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM smb_input2 a LEFT OUTER JOIN smb_input2 b ON a.value  is not distinct from  b.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@smb_input2
+#### A masked pattern was here ####
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	10	100
+10	100	100	100
+10	100	100	100
+10	100	12	100
+10	100	12	100
+10	1000	10	1000
+100	100	10	100
+100	100	10	100
+100	100	100	100
+100	100	12	100
+12	100	10	100
+12	100	10	100
+12	100	100	100
+12	100	12	100
+12	NULL	12	NULL
+12	NULL	NULL	NULL
+15	10015	15	10015
+20	10020	20	10020
+25	10025	25	10025
+30	10030	30	10030
+35	10035	35	10035
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	40	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	60	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	70	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+40	10040	80	10040
+5	10005	5	10005
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	50	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+50	10050	NULL	10050
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	40	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	60	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	70	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+60	10040	80	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	40	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	60	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	70	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+70	10040	80	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	40	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	60	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	70	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+80	10040	80	10040
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	50	10050
+NULL	10050	NULL	10050
+NULL	35	NULL	35
+NULL	NULL	12	NULL
+NULL	NULL	NULL	NULL
+PREHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL
+PREHOOK: type: QUERY
+POSTHOOK: query: explain select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL
+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), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: key is null (type: boolean)
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: null (type: int)
+                      sort order: +
+                      Map-reduce partition columns: null (type: int)
+                      Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                      value expressions: value (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 3 Data size: 26 Basic stats: COMPLETE Column stats: NONE
+                  Filter Operator
+                    predicate: value is null (type: boolean)
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                    Reduce Output Operator
+                      key expressions: null (type: int)
+                      sort order: +
+                      Map-reduce partition columns: null (type: int)
+                      Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                      value expressions: key (type: int)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 null (type: int)
+                  1 null (type: int)
+                nullSafes: [true]
+                outputColumnNames: _col1, _col5
+                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                Select Operator
+                  expressions: null (type: int), _col1 (type: int), _col5 (type: int), null (type: int)
+                  outputColumnNames: _col0, _col1, _col2, _col3
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 8 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
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL
+PREHOOK: type: QUERY
+PREHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from myinput1 a join myinput1 b on a.key is not distinct from b.value AND a.key is NULL
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@myinput1
+#### A masked pattern was here ####
+NULL	10	10	NULL
+NULL	10	48	NULL
+NULL	10	NULL	NULL
+NULL	35	10	NULL
+NULL	35	48	NULL
+NULL	35	NULL	NULL
+NULL	NULL	10	NULL
+NULL	NULL	48	NULL
+NULL	NULL	NULL	NULL