diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java index e577e19..59d2e4d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java @@ -1113,7 +1113,7 @@ public static MapJoinDesc getMapJoinDesc(HiveConf hconf, int[][] filterMap = desc.getFilterMap(); for (byte pos = 0; pos < op.getParentOperators().size(); pos++) { List valueCols = newValueExprs.get(pos); - if (pos != mapJoinPos) { + if (pos != mapJoinPos && op.getConf().isNoOuterJoin()) { // remove values in key exprs for value table schema // value expression for hashsink will be modified in // LocalMapJoinProcessor diff --git ql/src/test/queries/clientpositive/mapjoin2.q ql/src/test/queries/clientpositive/mapjoin2.q new file mode 100644 index 0000000..5dd39d4 --- /dev/null +++ ql/src/test/queries/clientpositive/mapjoin2.q @@ -0,0 +1,8 @@ +set hive.auto.convert.join=true; + +create table tbl (n bigint, t string); + +insert into tbl values (1, 'one'); +insert into tbl values(2, 'two'); + +select a.n, a.t, isnull(b.n), isnull(b.t) from (select * from tbl where n = 1) a left outer join (select * from tbl where 1 = 2) b on a.n = b.n; diff --git ql/src/test/results/clientpositive/mapjoin2.q.out ql/src/test/results/clientpositive/mapjoin2.q.out new file mode 100644 index 0000000..3ee0394 --- /dev/null +++ ql/src/test/results/clientpositive/mapjoin2.q.out @@ -0,0 +1,37 @@ +PREHOOK: query: create table tbl (n bigint, t string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@tbl +POSTHOOK: query: create table tbl (n bigint, t string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@tbl +PREHOOK: query: insert into tbl values (1, 'one') +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__1 +PREHOOK: Output: default@tbl +POSTHOOK: query: insert into tbl values (1, 'one') +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__1 +POSTHOOK: Output: default@tbl +POSTHOOK: Lineage: tbl.n EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: tbl.t SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +PREHOOK: query: insert into tbl values(2, 'two') +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__2 +PREHOOK: Output: default@tbl +POSTHOOK: query: insert into tbl values(2, 'two') +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__2 +POSTHOOK: Output: default@tbl +POSTHOOK: Lineage: tbl.n EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: tbl.t SIMPLE [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +PREHOOK: query: select a.n, a.t, isnull(b.n), isnull(b.t) from (select * from tbl where n = 1) a left outer join (select * from tbl where 1 = 2) b on a.n = b.n +PREHOOK: type: QUERY +PREHOOK: Input: default@tbl +#### A masked pattern was here #### +POSTHOOK: query: select a.n, a.t, isnull(b.n), isnull(b.t) from (select * from tbl where n = 1) a left outer join (select * from tbl where 1 = 2) b on a.n = b.n +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tbl +#### A masked pattern was here #### +1 one true true