This is an automated email from the ASF dual-hosted git repository. hashutosh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 779c42f HIVE-23435 : Full outer join result is missing rows (Mustafa Iman via Ashutosh Chauhan) 779c42f is described below commit 779c42fa3c73f41785eb3266f3438ab9e2a75032 Author: Mustafa Iman <mustafai...@gmail.com> AuthorDate: Mon Jun 1 10:26:14 2020 -0700 HIVE-23435 : Full outer join result is missing rows (Mustafa Iman via Ashutosh Chauhan) Signed-off-by: Ashutosh Chauhan <hashut...@apache.org> --- .../hadoop/hive/ql/exec/CommonJoinOperator.java | 18 +++- .../hive/ql/exec/CommonMergeJoinOperator.java | 2 +- .../apache/hadoop/hive/ql/exec/JoinOperator.java | 1 + .../hadoop/hive/ql/exec/MapJoinOperator.java | 1 + .../hadoop/hive/ql/exec/SMBMapJoinOperator.java | 1 + .../ql/exec/vector/VectorMapJoinBaseOperator.java | 2 - .../ql/exec/vector/VectorSMBMapJoinOperator.java | 1 - .../clientpositive/vector_full_outer_join2.q | 28 +++++ .../results/clientpositive/llap/join_1to1.q.out | 84 ++++++++++++--- .../llap/vector_full_outer_join2.q.out | 113 +++++++++++++++++++++ 10 files changed, 233 insertions(+), 18 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java index 2d76848..7a7c8a5 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java @@ -341,6 +341,8 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends forwardCache = new Object[totalSz]; aliasFilterTags = new short[numAliases]; Arrays.fill(aliasFilterTags, (byte)0xff); + aliasFilterTagsNext = new short[numAliases]; + Arrays.fill(aliasFilterTagsNext, (byte) 0xff); filterTags = new short[numAliases]; skipVectors = new boolean[numAliases][]; @@ -478,6 +480,7 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends * 100, 30 : N, N */ protected transient short[] aliasFilterTags; + protected transient short[] aliasFilterTagsNext; // all evaluation should be processed here for valid aliasFilterTags // @@ -491,11 +494,21 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends short filterTag = JoinUtil.isFiltered(row, joinFilters[alias], joinFilterObjectInspectors[alias], filterMaps[alias]); nr.add(new ShortWritable(filterTag)); - aliasFilterTags[alias] &= filterTag; } return nr; } + protected void addToAliasFilterTags(byte alias, List<Object> object, boolean isNextGroup) { + boolean hasFilter = hasFilter(alias); + if (hasFilter) { + if (isNextGroup) { + aliasFilterTagsNext[alias] &= ((ShortWritable) (object.get(object.size() - 1))).get(); + } else { + aliasFilterTags[alias] &= ((ShortWritable) (object.get(object.size() - 1))).get(); + } + } + } + // fill forwardCache with skipvector // returns whether a record was forwarded private boolean createForwardJoinObject(boolean[] skip) throws HiveException { @@ -961,7 +974,8 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends genJoinObject(); } } - Arrays.fill(aliasFilterTags, (byte)0xff); + System.arraycopy(aliasFilterTagsNext, 0, aliasFilterTags, 0, aliasFilterTagsNext.length); + Arrays.fill(aliasFilterTagsNext, (byte) 0xff); } protected void reportProgress() { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java index 581577e..0d9dc46 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java @@ -46,7 +46,6 @@ import org.apache.hadoop.hive.ql.plan.OperatorDesc; import org.apache.hadoop.hive.ql.plan.api.OperatorType; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils.ObjectInspectorCopyOption; -import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.io.WritableComparator; @@ -242,6 +241,7 @@ public class CommonMergeJoinOperator extends AbstractMapJoinOperator<CommonMerge //have we reached a new key group? boolean nextKeyGroup = processKey(alias, key); + addToAliasFilterTags(alias, value, nextKeyGroup); if (nextKeyGroup) { //assert this.nextGroupStorage[alias].size() == 0; this.nextGroupStorage[alias].addRow(value); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java index 451ba1f..9661bc9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java @@ -83,6 +83,7 @@ public class JoinOperator extends CommonJoinOperator<JoinDesc> implements Serial alias = (byte) tag; List<Object> nr = getFilteredValue(alias, row); + addToAliasFilterTags(alias, nr, false); if (handleSkewJoin) { skewJoinKeyContext.handleSkew(tag); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java index 07b1fba..489d09f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java @@ -582,6 +582,7 @@ public class MapJoinOperator extends AbstractMapJoinOperator<MapJoinDesc> implem } if (joinNeeded) { List<Object> value = getFilteredValue(alias, row); + addToAliasFilterTags(alias, value, false); // Add the value to the ArrayList storage[alias].addRow(value); // generate the output records diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java index c09bf53..55d6a6a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java @@ -288,6 +288,7 @@ public class SMBMapJoinOperator extends AbstractMapJoinOperator<SMBJoinDesc> imp //have we reached a new key group? boolean nextKeyGroup = processKey(alias, key); + addToAliasFilterTags(alias, value, nextKeyGroup); if (nextKeyGroup) { //assert this.nextGroupStorage[alias].size() == 0; this.nextGroupStorage[alias].addRow(value); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java index e80a3e2..b39f802 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java @@ -20,11 +20,9 @@ package org.apache.hadoop.hive.ql.exec.vector; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Future; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java index bef1a79..b0a5138 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java @@ -37,7 +37,6 @@ import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; import org.apache.hadoop.hive.ql.plan.OperatorDesc; import org.apache.hadoop.hive.ql.plan.SMBJoinDesc; import org.apache.hadoop.hive.ql.plan.VectorDesc; -import org.apache.hadoop.hive.ql.plan.VectorMapJoinDesc; import org.apache.hadoop.hive.ql.plan.VectorSMBJoinDesc; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; diff --git a/ql/src/test/queries/clientpositive/vector_full_outer_join2.q b/ql/src/test/queries/clientpositive/vector_full_outer_join2.q new file mode 100644 index 0000000..fefd0e0 --- /dev/null +++ b/ql/src/test/queries/clientpositive/vector_full_outer_join2.q @@ -0,0 +1,28 @@ +create table t_letters (z char(12), x int, y int); + +insert into t_letters values +('one', 1, 50), +('two', 2, 30), +('three', 3, 30), +('four', 4, 60), +('five', 5, 70), +('six', 6, 80); + +create table t_roman (z char(12), x int, y int); + +insert into t_roman values +('I', 1, 50), +('II', 2, 30), +('III', 3, 30), +('IV', 4, 60), +('V', 5, 70), +('VI', 6, 80); + + +select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` = x2.`x`); + +select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) and (x1.`x` = x2.`x`); \ No newline at end of file diff --git a/ql/src/test/results/clientpositive/llap/join_1to1.q.out b/ql/src/test/results/clientpositive/llap/join_1to1.q.out index 5619687..8495894 100644 --- a/ql/src/test/results/clientpositive/llap/join_1to1.q.out +++ b/ql/src/test/results/clientpositive/llap/join_1to1.q.out @@ -132,7 +132,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -143,17 +142,22 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -218,7 +222,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -229,17 +232,22 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 @@ -344,7 +352,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -355,18 +362,25 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -431,7 +445,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -442,18 +455,25 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 @@ -558,7 +578,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -575,12 +594,16 @@ POSTHOOK: Input: default@join_1to1_2 NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 +NULL NULL NULL 40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 @@ -590,6 +613,8 @@ NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 80 10040 66 NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -654,7 +679,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -671,12 +695,16 @@ POSTHOOK: Input: default@join_1to1_2 NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 +NULL NULL NULL 40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 @@ -686,6 +714,8 @@ NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 80 10040 66 NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 @@ -790,7 +820,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -801,17 +830,22 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -876,7 +910,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -887,17 +920,22 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 @@ -1002,7 +1040,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -1013,18 +1050,25 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -1089,7 +1133,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -1100,18 +1143,25 @@ POSTHOOK: Input: default@join_1to1_2 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 60 10040 66 +70 10040 66 NULL NULL NULL +70 10040 66 NULL NULL NULL 80 10040 88 NULL NULL NULL 80 10040 88 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 88 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = b.key1 @@ -1216,7 +1266,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -1233,12 +1282,16 @@ POSTHOOK: Input: default@join_1to1_2 NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 +NULL NULL NULL 40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 @@ -1248,6 +1301,8 @@ NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 80 10040 66 NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on a.key1 = b.key1 and a.key2 = b.key2 @@ -1312,7 +1367,6 @@ POSTHOOK: Input: default@join_1to1_2 30 10030 66 NULL NULL NULL 35 10035 88 NULL NULL NULL 40 10040 66 40 10040 66 -40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 5 10005 66 5 10005 66 50 10050 66 50 10050 66 @@ -1329,12 +1383,16 @@ POSTHOOK: Input: default@join_1to1_2 NULL 10050 66 NULL NULL NULL NULL NULL 66 NULL NULL NULL NULL NULL NULL 10 10010 66 +NULL NULL NULL 25 10025 66 NULL NULL NULL 30 10030 88 NULL NULL NULL 35 10035 88 +NULL NULL NULL 40 10040 66 NULL NULL NULL 40 10040 88 NULL NULL NULL 40 10040 88 NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 +NULL NULL NULL 50 10050 66 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 NULL NULL NULL 50 10050 88 @@ -1344,5 +1402,7 @@ NULL NULL NULL 70 10040 88 NULL NULL NULL 70 10040 88 NULL NULL NULL 80 10040 66 NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 +NULL NULL NULL 80 10040 66 NULL NULL NULL NULL 10050 66 NULL NULL NULL NULL NULL 66 diff --git a/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out b/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out new file mode 100644 index 0000000..b764fe5 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out @@ -0,0 +1,113 @@ +PREHOOK: query: create table t_letters (z char(12), x int, y int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t_letters +POSTHOOK: query: create table t_letters (z char(12), x int, y int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t_letters +PREHOOK: query: insert into t_letters values +('one', 1, 50), +('two', 2, 30), +('three', 3, 30), +('four', 4, 60), +('five', 5, 70), +('six', 6, 80) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@t_letters +POSTHOOK: query: insert into t_letters values +('one', 1, 50), +('two', 2, 30), +('three', 3, 30), +('four', 4, 60), +('five', 5, 70), +('six', 6, 80) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@t_letters +POSTHOOK: Lineage: t_letters.x SCRIPT [] +POSTHOOK: Lineage: t_letters.y SCRIPT [] +POSTHOOK: Lineage: t_letters.z SCRIPT [] +PREHOOK: query: create table t_roman (z char(12), x int, y int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t_roman +POSTHOOK: query: create table t_roman (z char(12), x int, y int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t_roman +PREHOOK: query: insert into t_roman values +('I', 1, 50), +('II', 2, 30), +('III', 3, 30), +('IV', 4, 60), +('V', 5, 70), +('VI', 6, 80) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@t_roman +POSTHOOK: query: insert into t_roman values +('I', 1, 50), +('II', 2, 30), +('III', 3, 30), +('IV', 4, 60), +('V', 5, 70), +('VI', 6, 80) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@t_roman +POSTHOOK: Lineage: t_roman.x SCRIPT [] +POSTHOOK: Lineage: t_roman.y SCRIPT [] +POSTHOOK: Lineage: t_roman.z SCRIPT [] +PREHOOK: query: select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` = x2.`x`) +PREHOOK: type: QUERY +PREHOOK: Input: default@t_letters +PREHOOK: Input: default@t_roman +#### A masked pattern was here #### +POSTHOOK: query: select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` = x2.`x`) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t_letters +POSTHOOK: Input: default@t_roman +#### A masked pattern was here #### +one 1 50 NULL NULL NULL +NULL NULL NULL I 1 50 +two 2 30 NULL NULL NULL +NULL NULL NULL II 2 30 +three 3 30 NULL NULL NULL +NULL NULL NULL III 3 30 +four 4 60 NULL NULL NULL +NULL NULL NULL IV 4 60 +five 5 70 NULL NULL NULL +NULL NULL NULL V 5 70 +six 6 80 NULL NULL NULL +NULL NULL NULL VI 6 80 +PREHOOK: query: select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) and (x1.`x` = x2.`x`) +PREHOOK: type: QUERY +PREHOOK: Input: default@t_letters +PREHOOK: Input: default@t_roman +#### A masked pattern was here #### +POSTHOOK: query: select x1.`z`, x1.`x`, x1.`y`, + x2.`z`, x2.`x`, x2.`y` +from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) and (x1.`x` = x2.`x`) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t_letters +POSTHOOK: Input: default@t_roman +#### A masked pattern was here #### +one 1 50 NULL NULL NULL +NULL NULL NULL I 1 50 +two 2 30 NULL NULL NULL +NULL NULL NULL II 2 30 +three 3 30 III 3 30 +four 4 60 NULL NULL NULL +NULL NULL NULL IV 4 60 +five 5 70 NULL NULL NULL +NULL NULL NULL V 5 70 +six 6 80 NULL NULL NULL +NULL NULL NULL VI 6 80