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