You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/05/27 13:16:58 UTC
[01/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Repository: tajo
Updated Branches:
refs/heads/master 4f3a46c36 -> 8fd9ae72c
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.plan b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.plan
new file mode 100644
index 0000000..9d713aa
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.plan
@@ -0,0 +1,80 @@
+explain
+-------------------------------
+TABLE_SUBQUERY(7) as default.result
+ => Targets: default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)
+ => out schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ => in schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ UNION(6)
+ PROJECTION(5)
+ => Targets: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), bbc as query
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), query (TEXT)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(3) on default.lineitem
+ => filter: default.lineitem.l_orderkey (INT4) = 1
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ PROJECTION(2)
+ => Targets: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), abc as query
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), query (TEXT)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(0) on default.lineitem
+ => filter: default.lineitem.l_orderkey (INT4) = 1
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000003)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [ROOT]
+=======================================================
+
+TABLE_SUBQUERY(11) as default.result
+ => Targets: default.result.l_orderkey (INT4) as default.result.l_orderkey, default.result.l_partkey (INT4) as default.result.l_partkey, default.result.query (TEXT) as default.result.query
+ => out schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ => in schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ PROJECTION(2)
+ => Targets: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), abc as query
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), query (TEXT)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(0) on default.lineitem
+ => filter: default.lineitem.l_orderkey (INT4) = 1
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [ROOT]
+=======================================================
+
+TABLE_SUBQUERY(12) as default.result
+ => Targets: default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)
+ => out schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ => in schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.query (TEXT)}
+ PROJECTION(5)
+ => Targets: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), bbc as query
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), query (TEXT)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(3) on default.lineitem
+ => filter: default.lineitem.l_orderkey (INT4) = 1
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.result b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.result
new file mode 100644
index 0000000..cf07e63
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion1.result
@@ -0,0 +1,6 @@
+l_orderkey,l_partkey,query
+-------------------------------
+1,1,abc
+1,1,abc
+1,1,bbc
+1,1,bbc
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.plan b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.plan
new file mode 100644
index 0000000..2e2280d
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.plan
@@ -0,0 +1,116 @@
+explain
+-------------------------------
+TABLE_SUBQUERY(8) as default.result
+ => Targets: default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)
+ => out schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)}
+ => in schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)}
+ JOIN(11)(INNER)
+ => Join Cond: default.res1.l_partkey (INT4) = default.res2.p_partkey (INT4)
+ => target list: default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(4) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT), default.res2.p_partkey (INT4)}
+ TABLE_SUBQUERY(5) as default.res2
+ => Targets: default.res2.p_partkey (INT4)
+ => out schema: {(1) default.res2.p_partkey (INT4)}
+ => in schema: {(9) default.res2.p_brand (TEXT), default.res2.p_comment (TEXT), default.res2.p_container (TEXT), default.res2.p_mfgr (TEXT), default.res2.p_name (TEXT), default.res2.p_partkey (INT4), default.res2.p_retailprice (FLOAT8), default.res2.p_size (INT4), default.res2.p_type (TEXT)}
+ SCAN(3) on default.part
+ => target list: default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)
+ => out schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ TABLE_SUBQUERY(2) as default.res1
+ => Targets: default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ SCAN(0) on default.lineitem
+ => target list: CASE WHEN default.lineitem.l_partkey (INT4) IS NOT NULL THEN WHEN default.lineitem.l_orderkey (INT4) = 1 THEN 1 ELSE 2 END as url, default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), url (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.res1.l_partkey (INT4), num=32)
+
+TABLE_SUBQUERY(2) as default.res1
+ => Targets: default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ PROJECTION(1)
+ => Targets: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), url (TEXT)
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), url (TEXT)}
+ => in schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), url (TEXT)}
+ SCAN(0) on default.lineitem
+ => target list: CASE WHEN default.lineitem.l_partkey (INT4) IS NOT NULL THEN WHEN default.lineitem.l_orderkey (INT4) = 1 THEN 1 ELSE 2 END as url, default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), url (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.res2.p_partkey (INT4), num=32)
+
+TABLE_SUBQUERY(5) as default.res2
+ => Targets: default.res2.p_partkey (INT4)
+ => out schema: {(1) default.res2.p_partkey (INT4)}
+ => in schema: {(9) default.res2.p_brand (TEXT), default.res2.p_comment (TEXT), default.res2.p_container (TEXT), default.res2.p_mfgr (TEXT), default.res2.p_name (TEXT), default.res2.p_partkey (INT4), default.res2.p_retailprice (FLOAT8), default.res2.p_size (INT4), default.res2.p_type (TEXT)}
+ PROJECTION(4)
+ => Targets: default.part.p_partkey (INT4), default.part.p_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_brand (TEXT), default.part.p_type (TEXT), default.part.p_size (INT4), default.part.p_container (TEXT), default.part.p_retailprice (FLOAT8), default.part.p_comment (TEXT)
+ => out schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ SCAN(3) on default.part
+ => target list: default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)
+ => out schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.res1.l_partkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.res2.p_partkey (INT4), num=32)
+
+TABLE_SUBQUERY(8) as default.result
+ => Targets: default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)
+ => out schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)}
+ => in schema: {(3) default.result.l_orderkey (INT4), default.result.l_partkey (INT4), default.result.url (TEXT)}
+ PROJECTION(7)
+ => Targets: default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ JOIN(11)(INNER)
+ => Join Cond: default.res1.l_partkey (INT4) = default.res2.p_partkey (INT4)
+ => target list: default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(4) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT), default.res2.p_partkey (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.res2.p_partkey (INT4)}
+ => in schema: {(1) default.res2.p_partkey (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000001
+ => out schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+ => in schema: {(3) default.res1.l_orderkey (INT4), default.res1.l_partkey (INT4), default.res1.url (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.result b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.result
new file mode 100644
index 0000000..da92d8c
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestUnionQuery/testComplexUnion2.result
@@ -0,0 +1,7 @@
+l_orderkey,l_partkey,url
+-------------------------------
+1,1,
+1,1,
+2,2,
+3,2,
+3,3,
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
index 33d6565..1c29a6d 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
@@ -33,11 +33,12 @@ import org.apache.tajo.util.TUtil;
import java.io.IOException;
public class AggregationFunctionCallEval extends FunctionEval implements Cloneable {
- @Expose boolean intermediatePhase = false;
- @Expose boolean finalPhase = true;
- @Expose String alias;
-// protected AggFunction instance;
+ // Both firstPhase and lastPhase flags should be true before global planning.
+ @Expose private boolean firstPhase = true;
+ @Expose private boolean lastPhase = true;
+ @Expose private String alias;
+
@Expose protected FunctionInvokeContext invokeContext;
protected transient AggFunctionInvoke functionInvoke;
@@ -66,8 +67,8 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
try {
if (evalContext != null && evalContext.hasScriptEngine(this)) {
this.invokeContext.setScriptEngine(evalContext.getScriptEngine(this));
- this.invokeContext.getScriptEngine().setIntermediatePhase(intermediatePhase);
- this.invokeContext.getScriptEngine().setFinalPhase(finalPhase);
+ this.invokeContext.getScriptEngine().setFirstPhase(firstPhase);
+ this.invokeContext.getScriptEngine().setLastPhase(lastPhase);
}
this.functionInvoke.init(invokeContext);
} catch (IOException e) {
@@ -85,7 +86,7 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
}
protected void mergeParam(FunctionContext context, Tuple params) {
- if (!intermediatePhase && !finalPhase) {
+ if (firstPhase) {
// firstPhase
functionInvoke.eval(context, params);
} else {
@@ -102,7 +103,7 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
if (!isBound) {
throw new IllegalStateException("bind() must be called before terminate()");
}
- if (!finalPhase) {
+ if (!lastPhase) {
return functionInvoke.getPartialResult(context);
} else {
return functionInvoke.terminate(context);
@@ -111,7 +112,7 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
@Override
public DataType getValueType() {
- if (!finalPhase) {
+ if (!lastPhase) {
return functionInvoke.getPartialResultType();
} else {
return funcDesc.getReturnType();
@@ -129,8 +130,8 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
public Object clone() throws CloneNotSupportedException {
AggregationFunctionCallEval clone = (AggregationFunctionCallEval)super.clone();
- clone.finalPhase = finalPhase;
- clone.intermediatePhase = intermediatePhase;
+ clone.lastPhase = lastPhase;
+ clone.firstPhase = firstPhase;
clone.alias = alias;
clone.invokeContext = (FunctionInvokeContext) invokeContext.clone();
if (functionInvoke != null) {
@@ -140,35 +141,31 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
return clone;
}
- public boolean isIntermediatePhase() {
- return intermediatePhase;
- }
-
- public void setIntermediatePhase(boolean flag) {
- this.intermediatePhase = flag;
+ public boolean isFirstPhase() {
+ return firstPhase;
}
- public void setFinalPhase(boolean flag) {
- this.finalPhase = flag;
+ public boolean isLastPhase() {
+ return lastPhase;
}
- public boolean isFinalPhase() {
- return finalPhase;
+ public void setFirstPhase() {
+ this.firstPhase = true;
+ this.lastPhase = false;
}
- public void setFirstPhase() {
- this.finalPhase = false;
- this.intermediatePhase = false;
+ public void setLastPhase() {
+ this.firstPhase = false;
+ this.lastPhase = true;
}
- public void setFinalPhase() {
- this.finalPhase = true;
- this.intermediatePhase = false;
+ public void setFirstAndLastPhase() {
+ this.lastPhase = this.firstPhase = true;
}
public void setIntermediatePhase() {
- this.finalPhase = false;
- this.intermediatePhase = true;
+ this.firstPhase = false;
+ this.lastPhase = false;
}
@Override
@@ -176,8 +173,8 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((alias == null) ? 0 : alias.hashCode());
- result = prime * result + (finalPhase ? 1231 : 1237);
- result = prime * result + (intermediatePhase ? 1231 : 1237);
+ result = prime * result + (lastPhase ? 1231 : 1237);
+ result = prime * result + (firstPhase ? 1249 : 1259);
return result;
}
@@ -187,8 +184,8 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
AggregationFunctionCallEval other = (AggregationFunctionCallEval) obj;
boolean eq = super.equals(other);
- eq &= intermediatePhase == other.intermediatePhase;
- eq &= finalPhase == other.finalPhase;
+ eq &= firstPhase == other.firstPhase;
+ eq &= lastPhase == other.lastPhase;
eq &= TUtil.checkEquals(alias, other.alias);
return eq;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
index 8980de1..0066c39 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
@@ -286,14 +286,14 @@ public class PythonScriptEngine extends TajoScriptEngine {
setSchema();
}
- public PythonScriptEngine(FunctionDesc functionDesc, boolean intermediatePhase, boolean finalPhase) {
+ public PythonScriptEngine(FunctionDesc functionDesc, boolean firstPhase, boolean lastPhase) {
if (!functionDesc.getInvocation().hasPython() && !functionDesc.getInvocation().hasPythonAggregation()) {
throw new IllegalStateException("Function type must be 'python'");
}
functionSignature = functionDesc.getSignature();
invocationDesc = functionDesc.getInvocation().getPython();
- this.intermediatePhase = intermediatePhase;
- this.finalPhase = finalPhase;
+ this.firstPhase = firstPhase;
+ this.lastPhase = lastPhase;
setSchema();
}
@@ -381,7 +381,7 @@ public class PythonScriptEngine extends TajoScriptEngine {
outSchema = new Schema(new Column[]{new Column("out", functionSignature.getReturnType())});
} else {
// UDAF
- if (!intermediatePhase && !finalPhase) {
+ if (firstPhase) {
// first phase
TajoDataTypes.DataType[] paramTypes = functionSignature.getParamTypes();
inSchema = new Schema();
@@ -389,11 +389,12 @@ public class PythonScriptEngine extends TajoScriptEngine {
inSchema.addColumn(new Column("in_" + i, paramTypes[i]));
}
outSchema = new Schema(new Column[]{new Column("json", TajoDataTypes.Type.TEXT)});
- } else if (intermediatePhase) {
- inSchema = outSchema = new Schema(new Column[]{new Column("json", TajoDataTypes.Type.TEXT)});
- } else if (finalPhase) {
+ } else if (lastPhase) {
inSchema = new Schema(new Column[]{new Column("json", TajoDataTypes.Type.TEXT)});
outSchema = new Schema(new Column[]{new Column("out", functionSignature.getReturnType())});
+ } else {
+ // intermediate phase
+ inSchema = outSchema = new Schema(new Column[]{new Column("json", TajoDataTypes.Type.TEXT)});
}
}
projectionCols = new int[outSchema.size()];
@@ -494,7 +495,7 @@ public class PythonScriptEngine extends TajoScriptEngine {
public void callAggFunc(FunctionContext functionContext, Tuple input) {
String methodName;
- if (!intermediatePhase && !finalPhase) {
+ if (firstPhase) {
// eval
methodName = "eval";
} else {
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/TajoScriptEngine.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/TajoScriptEngine.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/TajoScriptEngine.java
index c233fb8..8e35955 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/TajoScriptEngine.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/TajoScriptEngine.java
@@ -19,7 +19,6 @@
package org.apache.tajo.plan.function.python;
import org.apache.hadoop.conf.Configuration;
-import org.apache.tajo.catalog.Schema;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.plan.function.FunctionContext;
import org.apache.tajo.storage.Tuple;
@@ -32,8 +31,8 @@ import java.net.URI;
*/
public abstract class TajoScriptEngine {
- protected boolean intermediatePhase = false;
- protected boolean finalPhase = false;
+ protected boolean firstPhase = false;
+ protected boolean lastPhase = false;
/**
* Open a stream load a script locally or in the classpath
@@ -92,11 +91,11 @@ public abstract class TajoScriptEngine {
public abstract Datum getFinalResult(FunctionContext functionContext);
- public void setIntermediatePhase(boolean flag) {
- this.intermediatePhase = flag;
+ public void setFirstPhase(boolean flag) {
+ this.firstPhase = flag;
}
- public void setFinalPhase(boolean flag) {
- this.finalPhase = flag;
+ public void setLastPhase(boolean flag) {
+ this.lastPhase = flag;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
index 0976ab5..0ab62d5 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
@@ -36,6 +36,11 @@ public class CreateTableNode extends StoreTableNode implements Cloneable {
super(pid, NodeType.CREATE_TABLE);
}
+ @Override
+ public int childNum() {
+ return child == null ? 0 : 1;
+ }
+
public void setTableSchema(Schema schema) {
this.schema = schema;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
index bad8704..a0d8125 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
@@ -22,28 +22,21 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
-
import org.apache.tajo.algebra.JoinType;
import org.apache.tajo.plan.PlanString;
-import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.plan.Target;
import org.apache.tajo.plan.expr.BinaryEval;
import org.apache.tajo.plan.expr.EvalNode;
+import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.util.TUtil;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
public class JoinNode extends BinaryNode implements Projectable, Cloneable {
@Expose private JoinType joinType;
@Expose private EvalNode joinQual;
@Expose private Target[] targets;
- // transition states
- private boolean candidateBroadcast = false;
- private List<LogicalNode> broadcastCandidateTargets = new ArrayList<LogicalNode>();
-
public JoinNode(int pid) {
super(pid, NodeType.JOIN);
}
@@ -54,18 +47,6 @@ public class JoinNode extends BinaryNode implements Projectable, Cloneable {
setRightChild(right);
}
- public boolean isCandidateBroadcast() {
- return candidateBroadcast;
- }
-
- public void setCandidateBroadcast(boolean candidateBroadcast) {
- this.candidateBroadcast = candidateBroadcast;
- }
-
- public List<LogicalNode> getBroadcastCandidateTargets() {
- return broadcastCandidateTargets;
- }
-
public JoinType getJoinType() {
return this.joinType;
}
@@ -131,7 +112,6 @@ public class JoinNode extends BinaryNode implements Projectable, Cloneable {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + (candidateBroadcast ? 1231 : 1237);
result = prime * result + ((joinQual == null) ? 0 : joinQual.hashCode());
result = prime * result + ((joinType == null) ? 0 : joinType.hashCode());
result = prime * result + Arrays.hashCode(targets);
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
index cc54a22..587baa5 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
@@ -245,6 +245,7 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<FilterPushDownCo
Set<EvalNode> nonPushableQuals = TUtil.newHashSet();
// TODO: non-equi theta join quals must not be pushed until TAJO-742 is resolved.
nonPushableQuals.addAll(extractNonEquiThetaJoinQuals(wherePredicates, block, joinNode));
+ nonPushableQuals.addAll(extractNonEquiThetaJoinQuals(onPredicates, block, joinNode));
// for outer joins
if (PlannerUtil.isOuterJoin(joinNode.getJoinType())) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
index 80c18cc..72373cf 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
@@ -34,7 +34,6 @@ import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.*;
import org.apache.tajo.exception.InternalException;
import org.apache.tajo.plan.expr.*;
-import org.apache.tajo.plan.function.AggFunction;
import org.apache.tajo.plan.function.python.PythonScriptEngine;
import org.apache.tajo.plan.logical.WindowSpec;
import org.apache.tajo.plan.serder.PlanProto.WinFunctionEvalSpec;
@@ -191,8 +190,15 @@ public class EvalNodeDeserializer {
new AggregationFunctionCallEval(new FunctionDesc(funcProto.getFuncion()), params);
PlanProto.AggFunctionEvalSpec aggFunctionProto = protoNode.getAggFunction();
- aggFunc.setIntermediatePhase(aggFunctionProto.getIntermediatePhase());
- aggFunc.setFinalPhase(aggFunctionProto.getFinalPhase());
+ if (aggFunctionProto.getFirstPhase() && aggFunctionProto.getLastPhase()) {
+ aggFunc.setFirstAndLastPhase();
+ } else if (aggFunctionProto.getFirstPhase()) {
+ aggFunc.setFirstPhase();
+ } else if (aggFunctionProto.getLastPhase()) {
+ aggFunc.setLastPhase();
+ } else {
+ aggFunc.setIntermediatePhase();
+ }
if (aggFunctionProto.hasAlias()) {
aggFunc.setAlias(aggFunctionProto.getAlias());
}
@@ -200,7 +206,7 @@ public class EvalNodeDeserializer {
if (evalContext != null && funcDesc.getInvocation().hasPythonAggregation()) {
evalContext.addScriptEngine(current, new PythonScriptEngine(funcDesc,
- aggFunc.isIntermediatePhase(), aggFunc.isFinalPhase()));
+ aggFunc.isFirstPhase() , aggFunc.isLastPhase()));
}
} else {
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
index e47d620..a03b637 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
@@ -280,8 +280,8 @@ public class EvalNodeSerializer
AggregationFunctionCallEval aggFunc = (AggregationFunctionCallEval) function;
PlanProto.AggFunctionEvalSpec.Builder aggFunctionEvalBuilder = PlanProto.AggFunctionEvalSpec.newBuilder();
- aggFunctionEvalBuilder.setIntermediatePhase(aggFunc.isIntermediatePhase());
- aggFunctionEvalBuilder.setFinalPhase(aggFunc.isFinalPhase());
+ aggFunctionEvalBuilder.setFirstPhase(aggFunc.isFirstPhase());
+ aggFunctionEvalBuilder.setLastPhase(aggFunc.isLastPhase());
if (aggFunc.hasAlias()) {
aggFunctionEvalBuilder.setAlias(aggFunc.getAlias());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
index 84991bb..694e81c 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
@@ -43,11 +43,6 @@ import java.util.*;
* It deserializes a list of serialized logical nodes into a logical node tree.
*/
public class LogicalNodeDeserializer {
- private static final LogicalNodeDeserializer instance;
-
- static {
- instance = new LogicalNodeDeserializer();
- }
/**
* Deserialize a list of nodes into a logical node tree.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
index 60171de..88d831e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
@@ -76,11 +76,11 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
private static PlanProto.LogicalNode.Builder createNodeBuilder(SerializeContext context, LogicalNode node) {
int selfId;
- if (context.idMap.containsKey(node)) {
- selfId = context.idMap.get(node);
+ if (context.idMap.containsKey(node.getPID())) {
+ selfId = context.idMap.get(node.getPID());
} else {
selfId = context.seqId++;
- context.idMap.put(node, selfId);
+ context.idMap.put(node.getPID(), selfId);
}
PlanProto.LogicalNode.Builder nodeBuilder = PlanProto.LogicalNode.newBuilder();
@@ -100,7 +100,7 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
public static class SerializeContext {
private int seqId = 0;
- private Map<LogicalNode, Integer> idMap = Maps.newHashMap();
+ private Map<Integer, Integer> idMap = Maps.newHashMap(); // map for PID and visit sequence
private LogicalNodeTree.Builder treeBuilder = LogicalNodeTree.newBuilder();
}
@@ -485,7 +485,6 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
public LogicalNode visitCreateTable(SerializeContext context, LogicalPlan plan, LogicalPlan.QueryBlock block,
CreateTableNode node, Stack<LogicalNode> stack) throws PlanningException {
super.visitCreateTable(context, plan, block, node, stack);
-
int [] childIds = registerGetChildIds(context, node);
PlanProto.PersistentStoreNode.Builder persistentStoreBuilder = buildPersistentStoreBuilder(node, childIds);
@@ -629,7 +628,10 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
private static PlanProto.PersistentStoreNode.Builder buildPersistentStoreBuilder(PersistentStoreNode node,
int [] childIds) {
PlanProto.PersistentStoreNode.Builder persistentStoreBuilder = PlanProto.PersistentStoreNode.newBuilder();
- persistentStoreBuilder.setChildSeq(childIds[0]);
+ if (childIds.length > 0) {
+ // Simple create table may not have any children. This should be improved at TAJO-1589.
+ persistentStoreBuilder.setChildSeq(childIds[0]);
+ }
persistentStoreBuilder.setStorageType(node.getStorageType());
if (node.hasOptions()) {
persistentStoreBuilder.setTableProperties(node.getOptions().getProto());
@@ -719,8 +721,8 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
private int [] registerGetChildIds(SerializeContext context, LogicalNode node) {
int [] childIds = new int[node.childNum()];
for (int i = 0; i < node.childNum(); i++) {
- if (context.idMap.containsKey(node.getChild(i))) {
- childIds[i] = context.idMap.get(node.getChild(i));
+ if (node.getChild(i) != null && context.idMap.containsKey(node.getChild(i).getPID())) {
+ childIds[i] = context.idMap.get(node.getChild(i).getPID());
} else {
childIds[i] = context.seqId++;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-plan/src/main/proto/Plan.proto
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/proto/Plan.proto b/tajo-plan/src/main/proto/Plan.proto
index e8172ba..77a21b7 100644
--- a/tajo-plan/src/main/proto/Plan.proto
+++ b/tajo-plan/src/main/proto/Plan.proto
@@ -216,17 +216,17 @@ message PartitionTableScanSpec {
}
message PersistentStoreNode {
- required int32 childSeq = 1;
+ optional int32 childSeq = 1; // CreateTableNode may not have any children. This should be improved at TAJO-1589.
required string storageType = 2;
required KeyValueSetProto tableProperties = 3;
}
-message StoreTableNodeSpec { // required PersistentStoreSpec
+message StoreTableNodeSpec { // required PersistentStoreNode
optional string tableName = 1; // 'INSERT INTO LOCATION' does not require 'table name'.
optional PartitionMethodProto partitionMethod = 2;
}
-message InsertNodeSpec { // required PersistentStoreSpec and StoreTableSpec
+message InsertNodeSpec { // required PersistentStoreNode and StoreTableSpec
required bool overwrite = 1;
required SchemaProto tableSchema = 2;
optional SchemaProto targetSchema = 4;
@@ -234,7 +234,7 @@ message InsertNodeSpec { // required PersistentStoreSpec and StoreTableSpec
optional string path = 5;
}
-message CreateTableNodeSpec { // required PersistentStoreSpec and StoreTableNodeSpec
+message CreateTableNodeSpec { // required PersistentStoreNode and StoreTableNodeSpec
required SchemaProto schema = 1;
required bool external = 2;
required bool ifNotExists = 3;
@@ -424,8 +424,8 @@ message FunctionEval {
}
message AggFunctionEvalSpec { // requires FunctionEval
- required bool intermediatePhase = 1;
- required bool finalPhase = 2;
+ required bool firstPhase = 1;
+ required bool lastPhase = 2;
optional string alias = 3;
}
[02/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Sort.plan
index c4c25da..45b95c2 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Sort.plan
@@ -34,82 +34,52 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.lineitem
- 1: type=Broadcast, tables=default.jointable12
-
-TABLE_SUBQUERY(4) as default.a
- => Targets: default.a.id (INT4)
- => out schema: {(1) default.a.id (INT4)}
- => in schema: {(3) default.a.id (INT4), default.a.name (TEXT), default.a.l_shipdate (TEXT)}
- PROJECTION(3)
- => Targets: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
- => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- JOIN(9)(INNER)
- => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
- => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
- => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(4) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
- SCAN(0) on default.jointable12
- => filter: default.jointable12.id (INT4) > 10
- => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT)
- => out schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- SCAN(1) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
-
-SCAN(5) on default.jointable11 as b
- => target list: default.b.id (INT4)
- => out schema: {(1) default.b.id (INT4)}
- => in schema: {(2) default.b.id (INT4), default.b.name (TEXT)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.jointable12
+ 1: type=Broadcast, tables=default.b
JOIN(10)(LEFT_OUTER)
=> Join Cond: default.a.id (INT4) = default.b.id (INT4)
=> target list: default.a.id (INT4), default.b.id (INT4)
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
- SCAN(13) on eb_0000000000000_0000_000004
+ SCAN(5) on default.jointable11 as b
+ => target list: default.b.id (INT4)
=> out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- SCAN(12) on eb_0000000000000_0000_000003
+ => in schema: {(2) default.b.id (INT4), default.b.name (TEXT)}
+ TABLE_SUBQUERY(4) as default.a
+ => Targets: default.a.id (INT4)
=> out schema: {(1) default.a.id (INT4)}
- => in schema: {(1) default.a.id (INT4)}
+ => in schema: {(3) default.a.id (INT4), default.a.name (TEXT), default.a.l_shipdate (TEXT)}
+ PROJECTION(3)
+ => Targets: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ JOIN(9)(INNER)
+ => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
+ => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(4) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
+ SCAN(0) on default.jointable12
+ => filter: default.jointable12.id (INT4) > 10
+ => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT)
+ => out schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ SCAN(1) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.plan b/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.plan
new file mode 100644
index 0000000..17a7658
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.plan
@@ -0,0 +1,112 @@
+explain
+-------------------------------
+SORT(6)
+ => Sort Keys: default.l2.l_orderkey (INT4) (asc)
+ TABLE_SUBQUERY(5) as default.l2
+ => Targets: default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)
+ => out schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+ => in schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+ TABLE_SUBQUERY(3) as default.l1
+ => Targets: default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)
+ => out schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ => in schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ GROUP_BY(1)(l_orderkey)
+ => exprs: (sum(?multiply (FLOAT8)))
+ => target list: default.lineitem.l_orderkey (INT4), revenue (FLOAT8)
+ => out schema:{(2) default.lineitem.l_orderkey (INT4), revenue (FLOAT8)}
+ => in schema:{(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * default.lineitem.l_discount (FLOAT8) as ?multiply
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 2 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
+
+GROUP_BY(10)(l_orderkey)
+ => exprs: (sum(?multiply (FLOAT8)))
+ => target list: default.lineitem.l_orderkey (INT4), ?sum_1 (FLOAT8)
+ => out schema:{(2) default.lineitem.l_orderkey (INT4), ?sum_1 (FLOAT8)}
+ => in schema:{(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * default.lineitem.l_discount (FLOAT8) as ?multiply
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 2 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=RANGE_SHUFFLE, key=default.l2.l_orderkey (INT4), num=32)
+
+SORT(12)
+ => Sort Keys: default.l2.l_orderkey (INT4) (asc)
+ TABLE_SUBQUERY(5) as default.l2
+ => Targets: default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)
+ => out schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+ => in schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+ PROJECTION(4)
+ => Targets: default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)
+ => out schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ => in schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ TABLE_SUBQUERY(3) as default.l1
+ => Targets: default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)
+ => out schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ => in schema: {(2) default.l1.l_orderkey (INT4), default.l1.revenue (FLOAT8)}
+ PROJECTION(2)
+ => Targets: default.lineitem.l_orderkey (INT4), revenue (FLOAT8)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), revenue (FLOAT8)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), revenue (FLOAT8)}
+ GROUP_BY(1)(l_orderkey)
+ => exprs: (sum(?sum_1 (FLOAT8)))
+ => target list: default.lineitem.l_orderkey (INT4), revenue (FLOAT8)
+ => out schema:{(2) default.lineitem.l_orderkey (INT4), revenue (FLOAT8)}
+ => in schema:{(2) default.lineitem.l_orderkey (INT4), ?sum_1 (FLOAT8)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), ?sum_1 (FLOAT8)}
+ => in schema: {(2) default.lineitem.l_orderkey (INT4), ?sum_1 (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 2 => 3 (type=RANGE_SHUFFLE, key=default.l2.l_orderkey (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000002
+
+SORT(6)
+ => Sort Keys: default.l2.l_orderkey (INT4) (asc)
+ SCAN(13) on eb_0000000000000_0000_000002
+ => out schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+ => in schema: {(2) default.l2.l_orderkey (INT4), default.l2.revenue (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.result b/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.result
new file mode 100644
index 0000000..2b63526
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.result
@@ -0,0 +1,5 @@
+l_orderkey,revenue
+-------------------------------
+1,4985.2136
+2,0.0
+3,7923.13
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.plan b/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.plan
new file mode 100644
index 0000000..4cf1bac
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.plan
@@ -0,0 +1,88 @@
+explain
+-------------------------------
+SORT(2)
+ => Sort Keys: default.lineitem.l_returnflag (TEXT) (asc),default.lineitem.l_linestatus (TEXT) (asc)
+ GROUP_BY(1)(l_returnflag,l_linestatus)
+ => exprs: (count())
+ => target list: default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), count_order (INT8)
+ => out schema:{(3) count_order (INT8), default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ => in schema:{(2) default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)
+ => out schema: {(2) default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 2 (type=HASH_SHUFFLE, key=default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT), num=32)
+
+GROUP_BY(6)(l_linestatus,l_returnflag)
+ => exprs: (count())
+ => target list: default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), ?count (INT8)
+ => out schema:{(3) default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), ?count (INT8)}
+ => in schema:{(2) default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)
+ => out schema: {(2) default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 2 (type=HASH_SHUFFLE, key=default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=RANGE_SHUFFLE, key=default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT), num=32)
+
+SORT(8)
+ => Sort Keys: default.lineitem.l_returnflag (TEXT) (asc),default.lineitem.l_linestatus (TEXT) (asc)
+ GROUP_BY(1)(l_returnflag,l_linestatus)
+ => exprs: (count(?count (INT8)))
+ => target list: default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), count_order (INT8)
+ => out schema:{(3) count_order (INT8), default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ => in schema:{(3) default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), ?count (INT8)}
+ SCAN(7) on eb_0000000000000_0000_000001
+ => out schema: {(3) default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), ?count (INT8)}
+ => in schema: {(3) default.lineitem.l_returnflag (TEXT), default.lineitem.l_linestatus (TEXT), ?count (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 2 => 3 (type=RANGE_SHUFFLE, key=default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000002
+
+SORT(2)
+ => Sort Keys: default.lineitem.l_returnflag (TEXT) (asc),default.lineitem.l_linestatus (TEXT) (asc)
+ SCAN(9) on eb_0000000000000_0000_000002
+ => out schema: {(3) count_order (INT8), default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+ => in schema: {(3) count_order (INT8), default.lineitem.l_linestatus (TEXT), default.lineitem.l_returnflag (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.result b/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.result
index 94b5e84..a34b514 100644
--- a/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.result
+++ b/tajo-core/src/test/resources/results/TestTPCH/testQ1OrderBy.result
@@ -1,4 +1,4 @@
l_returnflag,l_linestatus,count_order
-------------------------------
N,O,3
-R,F,2
\ No newline at end of file
+R,F,2
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan b/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan
new file mode 100644
index 0000000..a2beae2
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan
@@ -0,0 +1,228 @@
+explain
+-------------------------------
+JOIN(14)(INNER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)
+ => out schema: {(12) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
+ => in schema: {(14) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)}
+ => in schema: {(5) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(0) on default.region
+ => filter: default.region.r_name (TEXT) = AMERICA
+ => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
+ => out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(12)(INNER)
+ => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(11) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(12) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ SCAN(7) on default.part
+ => filter: default.part.p_size (INT4) = 15 AND default.part.p_type (TEXT)LIKE'%BRASS'
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)
+ => out schema: {(4) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(11)(INNER)
+ => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(8) default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(10) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(5) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)
+ => out schema: {(3) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(3) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000010)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
+ |-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000006
+6: eb_0000000000000_0000_000007
+7: eb_0000000000000_0000_000005
+8: eb_0000000000000_0000_000008
+9: eb_0000000000000_0000_000009
+10: eb_0000000000000_0000_000010
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.supplier.s_suppkey (INT4), num=32)
+
+SCAN(3) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
+
+SCAN(5) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)
+ => out schema: {(3) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.supplier.s_suppkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.partsupp.ps_partkey (INT4), num=32)
+
+JOIN(11)(INNER)
+ => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(8) default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(10) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(17) on eb_0000000000000_0000_000002
+ => out schema: {(3) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ => in schema: {(3) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(16) on eb_0000000000000_0000_000001
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
+
+SCAN(7) on default.part
+ => filter: default.part.p_size (INT4) = 15 AND default.part.p_type (TEXT)LIKE'%BRASS'
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)
+ => out schema: {(4) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.partsupp.ps_partkey (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 9 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+
+JOIN(12)(INNER)
+ => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(11) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(12) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ SCAN(19) on eb_0000000000000_0000_000004
+ => out schema: {(4) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ => in schema: {(4) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ SCAN(18) on eb_0000000000000_0000_000003
+ => out schema: {(8) default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(8) default.partsupp.ps_partkey (INT4), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 8 (type=HASH_SHUFFLE, key=default.nation.n_regionkey (INT4), num=32)
+
+SCAN(1) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 7 => 8 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
+
+SCAN(0) on default.region
+ => filter: default.region.r_name (TEXT) = AMERICA
+ => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
+ => out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 6 => 8 (type=HASH_SHUFFLE, key=default.nation.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 7 => 8 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
+
+JOIN(13)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)}
+ => in schema: {(5) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(21) on eb_0000000000000_0000_000007
+ => out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ => in schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(20) on eb_0000000000000_0000_000006
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000009 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 5 => 9 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
+
+JOIN(14)(INNER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)
+ => out schema: {(12) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
+ => in schema: {(14) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.region.r_name (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ SCAN(23) on eb_0000000000000_0000_000008
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)}
+ => in schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.region.r_name (TEXT)}
+ SCAN(22) on eb_0000000000000_0000_000005
+ => out schema: {(11) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(11) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.part.p_size (INT4), default.part.p_type (TEXT), default.partsupp.ps_supplycost (FLOAT8), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000010 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.result b/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.result
index 7c81978..64d8e12 100644
--- a/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.result
+++ b/tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.result
@@ -1,3 +1,3 @@
s_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_comment,ps_supplycost,r_name,p_type,p_size
-------------------------------
-4192.4,Supplier#000000003,ARGENTINA,2,Manufacturer#1,q1,G3Pj6OjIuUYfUoH18BFTKP5aU9bEV3,11-383-516-1199,blithely silent requests after the express dependencies are sl,1.01,AMERICA,LARGE BRUSHED BRASS,15
\ No newline at end of file
+4192.4,Supplier#000000003,ARGENTINA,2,Manufacturer#1,q1,G3Pj6OjIuUYfUoH18BFTKP5aU9bEV3,11-383-516-1199,blithely silent requests after the express dependencies are sl,1.01,AMERICA,LARGE BRUSHED BRASS,15
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.plan b/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.plan
new file mode 100644
index 0000000..8a716eb
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.plan
@@ -0,0 +1,119 @@
+explain
+-------------------------------
+PROJECTION(3)
+ => Targets: 100.0 * ?sum_1 (FLOAT8) / ?sum_3 (FLOAT8) as promo_revenue
+ => out schema: {(1) promo_revenue (FLOAT8)}
+ => in schema: {(2) ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)}
+ GROUP_BY(5)()
+ => exprs: (sum(?casewhen (FLOAT8)),sum(?multiply_2 (FLOAT8)))
+ => target list: ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)
+ => out schema:{(2) ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)}
+ => in schema:{(2) ?casewhen (FLOAT8), ?multiply_2 (FLOAT8)}
+ JOIN(7)(INNER)
+ => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: CASE WHEN default.part.p_type (TEXT)LIKE'PROMO%' THEN default.lineitem.l_extendedprice (FLOAT8) ELSE 0.0 END as ?casewhen, ?multiply_2 (FLOAT8)
+ => out schema: {(2) ?casewhen (FLOAT8), ?multiply_2 (FLOAT8)}
+ => in schema: {(5) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4), default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ SCAN(1) on default.part
+ => target list: default.part.p_partkey (INT4), default.part.p_type (TEXT)
+ => out schema: {(2) default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * 1.0 - default.lineitem.l_discount (FLOAT8) as ?multiply_2
+ => out schema: {(3) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
+
+SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * 1.0 - default.lineitem.l_discount (FLOAT8) as ?multiply_2
+ => out schema: {(3) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
+
+SCAN(1) on default.part
+ => target list: default.part.p_partkey (INT4), default.part.p_type (TEXT)
+ => out schema: {(2) default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=, num=1)
+
+GROUP_BY(11)()
+ => exprs: (sum(?casewhen (FLOAT8)),sum(?multiply_2 (FLOAT8)))
+ => target list: ?sum_6 (FLOAT8), ?sum_7 (FLOAT8)
+ => out schema:{(2) ?sum_6 (FLOAT8), ?sum_7 (FLOAT8)}
+ => in schema:{(2) ?casewhen (FLOAT8), ?multiply_2 (FLOAT8)}
+ JOIN(7)(INNER)
+ => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: CASE WHEN default.part.p_type (TEXT)LIKE'PROMO%' THEN default.lineitem.l_extendedprice (FLOAT8) ELSE 0.0 END as ?casewhen, ?multiply_2 (FLOAT8)
+ => out schema: {(2) ?casewhen (FLOAT8), ?multiply_2 (FLOAT8)}
+ => in schema: {(5) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4), default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ SCAN(10) on eb_0000000000000_0000_000002
+ => out schema: {(2) default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ => in schema: {(2) default.part.p_partkey (INT4), default.part.p_type (TEXT)}
+ SCAN(9) on eb_0000000000000_0000_000001
+ => out schema: {(3) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4)}
+ => in schema: {(3) ?multiply_2 (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_partkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=, num=1)
+
+PROJECTION(3)
+ => Targets: 100.0 * ?sum_1 (FLOAT8) / ?sum_3 (FLOAT8) as promo_revenue
+ => out schema: {(1) promo_revenue (FLOAT8)}
+ => in schema: {(2) ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)}
+ GROUP_BY(5)()
+ => exprs: (sum(?sum_6 (FLOAT8)),sum(?sum_7 (FLOAT8)))
+ => target list: ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)
+ => out schema:{(2) ?sum_1 (FLOAT8), ?sum_3 (FLOAT8)}
+ => in schema:{(2) ?sum_6 (FLOAT8), ?sum_7 (FLOAT8)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(2) ?sum_6 (FLOAT8), ?sum_7 (FLOAT8)}
+ => in schema: {(2) ?sum_6 (FLOAT8), ?sum_7 (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.result b/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.result
index 6bc69cc..ace2a07 100644
--- a/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.result
+++ b/tajo-core/src/test/resources/results/TestTPCH/testTPCH14Expr.result
@@ -1,3 +1,3 @@
promo_revenue
-------------------------------
-33.610645634855025
\ No newline at end of file
+33.610645634855025
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan b/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan
new file mode 100644
index 0000000..95abaf1
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan
@@ -0,0 +1,332 @@
+explain
+-------------------------------
+SORT(8)
+ => Sort Keys: revenue (FLOAT8) (desc)
+ GROUP_BY(7)(n_name)
+ => exprs: (sum(?multiply (FLOAT8)))
+ => target list: default.nation.n_name (TEXT), revenue (FLOAT8)
+ => out schema:{(2) default.nation.n_name (TEXT), revenue (FLOAT8)}
+ => in schema:{(2) ?multiply (FLOAT8), default.nation.n_name (TEXT)}
+ JOIN(20)(INNER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: ?multiply (FLOAT8), default.nation.n_name (TEXT)
+ => out schema: {(2) ?multiply (FLOAT8), default.nation.n_name (TEXT)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.supplier.s_nationkey (INT4)}
+ JOIN(19)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
+ => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
+ SCAN(5) on default.region
+ => filter: default.region.r_name (TEXT) = ASIA
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(4) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(18)(INNER)
+ => Join Cond: default.lineitem.l_suppkey (INT4) = default.supplier.s_suppkey (INT4)
+ => target list: ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4), default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ JOIN(17)(INNER)
+ => Join Cond: default.customer.c_nationkey (INT4) = default.supplier.s_nationkey (INT4)
+ => target list: default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(3) default.customer.c_nationkey (INT4), default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ SCAN(0) on default.customer
+ => target list: default.customer.c_nationkey (INT4)
+ => out schema: {(1) default.customer.c_nationkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+ SCAN(3) on default.supplier
+ => target list: default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ JOIN(16)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
+ => target list: ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(1) on default.orders
+ => filter: default.orders.o_orderdate (TEXT) >= 1994-01-01 AND default.orders.o_orderdate (TEXT) < 1995-01-01
+ => target list: default.orders.o_orderkey (INT4)
+ => out schema: {(1) default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ SCAN(2) on default.lineitem
+ => target list: default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * 1.0 - default.lineitem.l_discount (FLOAT8) as ?multiply
+ => out schema: {(5) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000014)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000014
+ |-eb_0000000000000_0000_000013
+ |-eb_0000000000000_0000_000012
+ |-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
+ |-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000004
+4: eb_0000000000000_0000_000005
+5: eb_0000000000000_0000_000003
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000008
+8: eb_0000000000000_0000_000009
+9: eb_0000000000000_0000_000007
+10: eb_0000000000000_0000_000010
+11: eb_0000000000000_0000_000011
+12: eb_0000000000000_0000_000012
+13: eb_0000000000000_0000_000013
+14: eb_0000000000000_0000_000014
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
+
+SCAN(2) on default.lineitem
+ => target list: default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4), default.lineitem.l_extendedprice (FLOAT8) * 1.0 - default.lineitem.l_discount (FLOAT8) as ?multiply
+ => out schema: {(5) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
+
+SCAN(1) on default.orders
+ => filter: default.orders.o_orderdate (TEXT) >= 1994-01-01 AND default.orders.o_orderdate (TEXT) < 1995-01-01
+ => target list: default.orders.o_orderkey (INT4)
+ => out schema: {(1) default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.lineitem.l_suppkey (INT4), num=32)
+
+JOIN(16)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
+ => target list: ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(23) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.orders.o_orderkey (INT4)}
+ => in schema: {(1) default.orders.o_orderkey (INT4)}
+ SCAN(22) on eb_0000000000000_0000_000001
+ => out schema: {(5) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(5) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_orderkey (INT4), default.lineitem.l_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+
+SCAN(3) on default.supplier
+ => target list: default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.customer.c_nationkey (INT4), num=32)
+
+SCAN(0) on default.customer
+ => target list: default.customer.c_nationkey (INT4)
+ => out schema: {(1) default.customer.c_nationkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.customer.c_nationkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_suppkey (INT4), num=32)
+
+JOIN(17)(INNER)
+ => Join Cond: default.customer.c_nationkey (INT4) = default.supplier.s_nationkey (INT4)
+ => target list: default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(3) default.customer.c_nationkey (INT4), default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ SCAN(25) on eb_0000000000000_0000_000005
+ => out schema: {(1) default.customer.c_nationkey (INT4)}
+ => in schema: {(1) default.customer.c_nationkey (INT4)}
+ SCAN(24) on eb_0000000000000_0000_000004
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.lineitem.l_suppkey (INT4), num=32)
+[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_suppkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 7 => 11 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+
+JOIN(18)(INNER)
+ => Join Cond: default.lineitem.l_suppkey (INT4) = default.supplier.s_suppkey (INT4)
+ => target list: ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4), default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ SCAN(27) on eb_0000000000000_0000_000006
+ => out schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ => in schema: {(2) default.supplier.s_nationkey (INT4), default.supplier.s_suppkey (INT4)}
+ SCAN(26) on eb_0000000000000_0000_000003
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)}
+ => in schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_suppkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 8 => 10 (type=HASH_SHUFFLE, key=default.nation.n_regionkey (INT4), num=32)
+
+SCAN(4) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000009 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
+
+SCAN(5) on default.region
+ => filter: default.region.r_name (TEXT) = ASIA
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000010 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 8 => 10 (type=HASH_SHUFFLE, key=default.nation.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
+
+JOIN(19)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
+ => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
+ SCAN(29) on eb_0000000000000_0000_000009
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(1) default.region.r_regionkey (INT4)}
+ SCAN(28) on eb_0000000000000_0000_000008
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000011 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 7 => 11 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 11 => 12 (type=HASH_SHUFFLE, key=default.nation.n_name (TEXT), num=32)
+
+GROUP_BY(32)(n_name)
+ => exprs: (sum(?multiply (FLOAT8)))
+ => target list: default.nation.n_name (TEXT), ?sum_7 (FLOAT8)
+ => out schema:{(2) default.nation.n_name (TEXT), ?sum_7 (FLOAT8)}
+ => in schema:{(2) ?multiply (FLOAT8), default.nation.n_name (TEXT)}
+ JOIN(20)(INNER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: ?multiply (FLOAT8), default.nation.n_name (TEXT)
+ => out schema: {(2) ?multiply (FLOAT8), default.nation.n_name (TEXT)}
+ => in schema: {(6) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.supplier.s_nationkey (INT4)}
+ SCAN(31) on eb_0000000000000_0000_000010
+ => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ => in schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ SCAN(30) on eb_0000000000000_0000_000007
+ => out schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)}
+ => in schema: {(4) ?multiply (FLOAT8), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.supplier.s_nationkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000012 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 11 => 12 (type=HASH_SHUFFLE, key=default.nation.n_name (TEXT), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 12 => 13 (type=RANGE_SHUFFLE, key=revenue (FLOAT8), num=32)
+
+SORT(34)
+ => Sort Keys: revenue (FLOAT8) (desc)
+ GROUP_BY(7)(n_name)
+ => exprs: (sum(?sum_7 (FLOAT8)))
+ => target list: default.nation.n_name (TEXT), revenue (FLOAT8)
+ => out schema:{(2) default.nation.n_name (TEXT), revenue (FLOAT8)}
+ => in schema:{(2) default.nation.n_name (TEXT), ?sum_7 (FLOAT8)}
+ SCAN(33) on eb_0000000000000_0000_000011
+ => out schema: {(2) default.nation.n_name (TEXT), ?sum_7 (FLOAT8)}
+ => in schema: {(2) default.nation.n_name (TEXT), ?sum_7 (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000013 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 12 => 13 (type=RANGE_SHUFFLE, key=revenue (FLOAT8), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000012
+
+SORT(8)
+ => Sort Keys: revenue (FLOAT8) (desc)
+ SCAN(35) on eb_0000000000000_0000_000012
+ => out schema: {(2) default.nation.n_name (TEXT), revenue (FLOAT8)}
+ => in schema: {(2) default.nation.n_name (TEXT), revenue (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000014 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.result b/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.result
new file mode 100644
index 0000000..f15c366
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.result
@@ -0,0 +1,2 @@
+n_name,revenue
+-------------------------------
[12/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
index 0e1b501..4fe150b 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
@@ -38,6 +38,7 @@ import org.apache.tajo.engine.planner.global.DataChannel;
import org.apache.tajo.engine.planner.global.ExecutionBlock;
import org.apache.tajo.engine.planner.global.GlobalPlanner;
import org.apache.tajo.engine.planner.global.MasterPlan;
+import org.apache.tajo.engine.planner.global.rewriter.rules.GlobalPlanRewriteUtil;
import org.apache.tajo.engine.utils.TupleUtil;
import org.apache.tajo.exception.InternalException;
import org.apache.tajo.ipc.TajoWorkerProtocol.DistinctGroupbyEnforcer.MultipleAggregationStage;
@@ -107,7 +108,7 @@ public class Repartitioner {
fragments[i] = new FileFragment(scans[i].getCanonicalName(), tablePath, 0, 0, new String[]{UNKNOWN_HOST});
} else {
try {
- stats[i] = GlobalPlanner.computeDescendentVolume(scans[i]);
+ stats[i] = GlobalPlanRewriteUtil.computeDescendentVolume(scans[i]);
} catch (PlanningException e) {
throw new IOException(e);
}
@@ -188,37 +189,7 @@ public class Repartitioner {
}
// Assigning either fragments or fetch urls to query units
- boolean isAllBroadcastTable = true;
- for (int i = 0; i < scans.length; i++) {
- if (!execBlock.isBroadcastTable(scans[i].getCanonicalName())) {
- isAllBroadcastTable = false;
- break;
- }
- }
-
-
- if (isAllBroadcastTable) { // if all relations of this EB are broadcasted
- // set largest table to normal mode
- long maxStats = Long.MIN_VALUE;
- int maxStatsScanIdx = -1;
- for (int i = 0; i < scans.length; i++) {
- // finding largest table.
- // If stats == 0, can't be base table.
- if (stats[i] > 0 && stats[i] > maxStats) {
- maxStats = stats[i];
- maxStatsScanIdx = i;
- }
- }
- if (maxStatsScanIdx == -1) {
- maxStatsScanIdx = 0;
- }
- int baseScanIdx = maxStatsScanIdx;
- scans[baseScanIdx].setBroadcastTable(false);
- execBlock.removeBroadcastTable(scans[baseScanIdx].getCanonicalName());
- LOG.info(String.format("[Distributed Join Strategy] : Broadcast Join with all tables, base_table=%s, base_volume=%d",
- scans[baseScanIdx].getCanonicalName(), stats[baseScanIdx]));
- scheduleLeafTasksWithBroadcastTable(schedulerContext, stage, baseScanIdx, fragments);
- } else if (!execBlock.getBroadcastTables().isEmpty()) { // If some relations of this EB are broadcasted
+ if (execBlock.hasBroadcastRelation()) { // If some relations of this EB are broadcasted
boolean hasNonLeafNode = false;
List<Integer> largeScanIndexList = new ArrayList<Integer>();
List<Integer> broadcastIndexList = new ArrayList<Integer>();
@@ -235,7 +206,7 @@ public class Repartitioner {
nonLeafScanNamesBuilder.append(namePrefix).append(scans[i].getCanonicalName());
namePrefix = ",";
}
- if (execBlock.isBroadcastTable(scans[i].getCanonicalName())) {
+ if (execBlock.isBroadcastRelation(scans[i])) {
broadcastIndexList.add(i);
} else {
// finding largest table.
@@ -269,31 +240,31 @@ public class Repartitioner {
}
//select intermediate scan and stats
- ScanNode[] intermediateScans = new ScanNode[largeScanIndexList.size()];
long[] intermediateScanStats = new long[largeScanIndexList.size()];
Fragment[] intermediateFragments = new Fragment[largeScanIndexList.size()];
int index = 0;
for (Integer eachIdx : largeScanIndexList) {
- intermediateScans[index] = scans[eachIdx];
intermediateScanStats[index] = stats[eachIdx];
intermediateFragments[index++] = fragments[eachIdx];
}
Fragment[] broadcastFragments = new Fragment[broadcastIndexList.size()];
ScanNode[] broadcastScans = new ScanNode[broadcastIndexList.size()];
+ long[] broadcastStats = new long[broadcastIndexList.size()];
index = 0;
for (Integer eachIdx : broadcastIndexList) {
scans[eachIdx].setBroadcastTable(true);
broadcastScans[index] = scans[eachIdx];
+ broadcastStats[index] = stats[eachIdx];
broadcastFragments[index] = fragments[eachIdx];
index++;
}
LOG.info(String.format("[Distributed Join Strategy] : Broadcast Join, join_node=%s", nonLeafScanNames));
scheduleSymmetricRepartitionJoin(masterContext, schedulerContext, stage,
- intermediateScans, intermediateScanStats, intermediateFragments, broadcastScans, broadcastFragments);
+ intermediateScanStats, intermediateFragments, broadcastScans, broadcastStats, broadcastFragments);
}
} else {
LOG.info("[Distributed Join Strategy] : Symmetric Repartition Join");
- scheduleSymmetricRepartitionJoin(masterContext, schedulerContext, stage, scans, stats, fragments, null, null);
+ scheduleSymmetricRepartitionJoin(masterContext, schedulerContext, stage, stats, fragments, null, null, null);
}
}
@@ -302,7 +273,6 @@ public class Repartitioner {
* @param masterContext
* @param schedulerContext
* @param stage
- * @param scans
* @param stats
* @param fragments
* @throws IOException
@@ -310,10 +280,10 @@ public class Repartitioner {
private static void scheduleSymmetricRepartitionJoin(QueryMasterTask.QueryMasterTaskContext masterContext,
TaskSchedulerContext schedulerContext,
Stage stage,
- ScanNode[] scans,
long[] stats,
Fragment[] fragments,
ScanNode[] broadcastScans,
+ long[] broadcastStats,
Fragment[] broadcastFragments) throws IOException {
MasterPlan masterPlan = stage.getMasterPlan();
ExecutionBlock execBlock = stage.getBlock();
@@ -375,18 +345,20 @@ public class Repartitioner {
// hashEntries can be zero if there are no input data.
// In the case, it will cause the zero divided exception.
// it avoids this problem.
+ long leftStats = stats[0];
+ long rightStats = stats.length == 2 ? stats[1] : broadcastStats[0];
int[] avgSize = new int[2];
- avgSize[0] = hashEntries.size() == 0 ? 0 : (int) (stats[0] / hashEntries.size());
- avgSize[1] = hashEntries.size() == 0 ? 0 : (int) (stats[1] / hashEntries.size());
+ avgSize[0] = hashEntries.size() == 0 ? 0 : (int) (leftStats / hashEntries.size());
+ avgSize[1] = hashEntries.size() == 0 ? 0 : (int) (stats.length == 2 ? (rightStats / hashEntries.size()) : rightStats);
int bothFetchSize = avgSize[0] + avgSize[1];
// Getting the desire number of join tasks according to the volumn
// of a larger table
- int largerIdx = stats[0] >= stats[1] ? 0 : 1;
+ long largerStat = leftStats >= rightStats ? leftStats : rightStats;
int desireJoinTaskVolumn = stage.getMasterPlan().getContext().getInt(SessionVars.JOIN_TASK_INPUT_SIZE);
// calculate the number of tasks according to the data size
- int mb = (int) Math.ceil((double) stats[largerIdx] / 1048576);
+ int mb = (int) Math.ceil((double) largerStat / 1048576);
LOG.info("Larger intermediate data is approximately " + mb + " MB");
// determine the number of task per 64MB
int maxTaskNum = (int) Math.ceil((double) mb / desireJoinTaskVolumn);
@@ -398,7 +370,9 @@ public class Repartitioner {
LOG.info("The determined number of join tasks is " + joinTaskNum);
List<Fragment> rightFragments = new ArrayList<Fragment>();
- rightFragments.add(fragments[1]);
+ if (fragments.length == 2) {
+ rightFragments.add(fragments[1]);
+ }
if (broadcastFragments != null) {
//In this phase a ScanNode has a single fragment.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
index 160bfaa..5a0fc38 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
@@ -712,7 +712,7 @@ public class Stage implements EventHandler<StageEvent> {
*/
private void finalizeStats() {
TableStats[] statsArray;
- if (block.hasUnion()) {
+ if (block.isUnionOnly()) {
statsArray = computeStatFromUnionBlock(this);
} else {
statsArray = computeStatFromTasks();
@@ -784,7 +784,7 @@ public class Stage implements EventHandler<StageEvent> {
try {
// Union operator does not require actual query processing. It is performed logically.
- if (execBlock.hasUnion()) {
+ if (execBlock.isUnionOnly()) {
// Though union operator does not be processed at all, but it should handle the completion event.
stage.complete();
state = StageState.SUCCEEDED;
@@ -883,7 +883,7 @@ public class Stage implements EventHandler<StageEvent> {
}
// We assume this execution block the first stage of join if two or more tables are included in this block,
- if (parent != null && parent.getScanNodes().length >= 2) {
+ if (parent != null && (parent.getNonBroadcastRelNum()) >= 2) {
List<ExecutionBlock> childs = masterPlan.getChilds(parent);
// for outer
@@ -990,6 +990,7 @@ public class Stage implements EventHandler<StageEvent> {
MasterPlan masterPlan = stage.getMasterPlan();
ExecutionBlock execBlock = stage.getBlock();
if (stage.getMasterPlan().isLeaf(execBlock.getId()) && execBlock.getScanNodes().length == 1) { // Case 1: Just Scan
+ // Some execution blocks can have broadcast table even though they don't have any join nodes
scheduleFragmentsForLeafQuery(stage);
} else if (execBlock.getScanNodes().length > 1) { // Case 2: Join
Repartitioner.scheduleFragmentsForJoinQuery(stage.schedulerContext, stage);
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/benchmark/TestTPCH.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/benchmark/TestTPCH.java b/tajo-core/src/test/java/org/apache/tajo/benchmark/TestTPCH.java
index 4ca9b3e..9b7db2d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/benchmark/TestTPCH.java
+++ b/tajo-core/src/test/java/org/apache/tajo/benchmark/TestTPCH.java
@@ -34,23 +34,30 @@ public class TestTPCH extends QueryTestCaseBase {
}
@Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
public void testQ1OrderBy() throws Exception {
- ResultSet res = executeQuery();
- assertResultSet(res);
- cleanupQuery(res);
+ runSimpleTests();
}
@Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
public void testQ2FourJoins() throws Exception {
- ResultSet res = executeQuery();
- assertResultSet(res);
- cleanupQuery(res);
+ runSimpleTests();
}
@Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
public void testTPCH14Expr() throws Exception {
- ResultSet res = executeQuery();
- assertResultSet(res);
- cleanupQuery(res);
+ runSimpleTests();
+ }
+
+ @Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
+ public void testTPCHQ5() throws Exception {
+ runSimpleTests();
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
index 4f90386..3055362 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
@@ -835,7 +835,7 @@ public class TestGroupByQuery extends QueryTestCaseBase {
cleanupQuery(res);
}
- // TODO: this test cannot be executed due to the bug of logical planner
+ // TODO: this test cannot be executed due to the bug of logical planner (TAJO-1588)
// @Test
public final void testPythonUdafWithHaving() throws Exception {
ResultSet res = executeQuery();
@@ -850,7 +850,7 @@ public class TestGroupByQuery extends QueryTestCaseBase {
cleanupQuery(res);
}
- // TODO: this test cannot be executed due to the bug of logical planner
+ // TODO: this test cannot be executed due to the bug of logical planner (TAJO-1588)
// @Test
public final void testComplexTargetWithPythonUdaf() throws Exception {
ResultSet res = executeQuery();
@@ -858,7 +858,7 @@ public class TestGroupByQuery extends QueryTestCaseBase {
cleanupQuery(res);
}
- // TODO: this test cannot be executed due to the bug of logical planner
+ // TODO: this test cannot be executed due to the bug of logical planner (TAJO-1588)
// @Test
public final void testDistinctPythonUdafWithUnion1() throws Exception {
ResultSet res = executeQuery();
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
index a8e2a3b..2bcb5d9 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
@@ -122,4 +122,11 @@ public class TestInnerJoinWithSubQuery extends TestJoinQuery {
public final void testBroadcastSubquery2() throws Exception {
runSimpleTests();
}
+
+ @Test
+ @Option(withExplain = true, withExplainGlobal = true, parameterized = true)
+ @SimpleTest()
+ public final void testThetaJoinKeyPairs() throws Exception {
+ runSimpleTests();
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
index 077b7d2..d646202 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
@@ -349,7 +349,7 @@ public class TestOuterJoinQuery extends TestJoinQuery {
}
// TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553
-// @Test
+ @Test
@Option(withExplain = true, withExplainGlobal = true, parameterized = true)
@SimpleTest(queries = {
@QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" +
@@ -364,7 +364,7 @@ public class TestOuterJoinQuery extends TestJoinQuery {
}
// TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553
-// @Test
+ @Test
@Option(withExplain = true, withExplainGlobal = true, parameterized = true)
@SimpleTest(queries = {
@QuerySpec("select t1.id, t1.name, t3.id, t4.id\n" +
@@ -383,7 +383,7 @@ public class TestOuterJoinQuery extends TestJoinQuery {
}
// TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553
-// @Test
+ @Test
@Option(withExplain = true, withExplainGlobal = true, parameterized = true)
@SimpleTest(queries = {
@QuerySpec("select t1.id, t1.name, t2.id, t3.id\n" +
@@ -398,7 +398,7 @@ public class TestOuterJoinQuery extends TestJoinQuery {
}
// TODO: this test is disabled due to a bug in broadcast join. It will be enabled after TAJO-1553
-// @Test
+ @Test
@Option(withExplain = true, withExplainGlobal = true, parameterized = true)
@SimpleTest(queries = {
@QuerySpec("select t1.id, t1.name, t3.id, t4.id\n" +
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java
index fa77fda..24b525d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSortQuery.java
@@ -370,4 +370,11 @@ public class TestSortQuery extends QueryTestCaseBase {
assertResultSet(res);
cleanupQuery(res);
}
+
+ @Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest()
+ public final void testSubQuerySortAfterGroupMultiBlocks() throws Exception {
+ runSimpleTests();
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
index 03a80d1..03c9c24 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
@@ -512,4 +512,17 @@ public class TestUnionQuery extends QueryTestCaseBase {
res.close();
}
+ @Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
+ public void testComplexUnion1() throws Exception {
+ runSimpleTests();
+ }
+
+ @Test
+ @Option(withExplain = true, withExplainGlobal = true)
+ @SimpleTest
+ public void testComplexUnion2() throws Exception {
+ runSimpleTests();
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java b/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java
index 0a473b5..c82637d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java
+++ b/tajo-core/src/test/java/org/apache/tajo/master/TestExecutionBlockCursor.java
@@ -110,7 +110,7 @@ public class TestExecutionBlockCursor {
optimizer.optimize(logicalPlan);
QueryContext queryContext = new QueryContext(conf);
MasterPlan plan = new MasterPlan(LocalTajoTestingUtility.newQueryId(), queryContext, logicalPlan);
- planner.build(plan);
+ planner.build(queryContext, plan);
ExecutionBlockCursor cursor = new ExecutionBlockCursor(plan);
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
deleted file mode 100644
index 8591f88..0000000
--- a/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.master;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tajo.LocalTajoTestingUtility;
-import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.algebra.Expr;
-import org.apache.tajo.benchmark.TPCH;
-import org.apache.tajo.catalog.*;
-import org.apache.tajo.catalog.partition.PartitionMethodDesc;
-import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.catalog.statistics.TableStats;
-import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.engine.function.FunctionLoader;
-import org.apache.tajo.engine.parser.SQLAnalyzer;
-import org.apache.tajo.engine.planner.global.DataChannel;
-import org.apache.tajo.engine.planner.global.ExecutionBlock;
-import org.apache.tajo.engine.planner.global.GlobalPlanner;
-import org.apache.tajo.engine.planner.global.MasterPlan;
-import org.apache.tajo.engine.query.QueryContext;
-import org.apache.tajo.plan.*;
-import org.apache.tajo.plan.expr.BinaryEval;
-import org.apache.tajo.plan.expr.EvalType;
-import org.apache.tajo.plan.expr.FieldEval;
-import org.apache.tajo.plan.util.PlannerUtil;
-import org.apache.tajo.util.CommonTestingUtil;
-import org.apache.tajo.util.FileUtil;
-import org.apache.tajo.util.TUtil;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-
-import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
-import static org.apache.tajo.TajoConstants.DEFAULT_TABLESPACE_NAME;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class TestGlobalPlanner {
- private static Log LOG = LogFactory.getLog(TestGlobalPlanner.class);
-
- private static TajoTestingCluster util;
- private static CatalogService catalog;
- private static SQLAnalyzer sqlAnalyzer;
- private static LogicalPlanner planner;
- private static LogicalOptimizer optimizer;
- private static TPCH tpch;
- private static GlobalPlanner globalPlanner;
-
- @BeforeClass
- public static void setUp() throws Exception {
- util = new TajoTestingCluster();
- util.startCatalogCluster();
- catalog = util.getMiniCatalogCluster().getCatalog();
- for (FunctionDesc funcDesc : FunctionLoader.findLegacyFunctions()) {
- catalog.createFunction(funcDesc);
- }
- catalog.createTablespace(DEFAULT_TABLESPACE_NAME, "hdfs://localhost:1234/warehouse");
- catalog.createDatabase(DEFAULT_DATABASE_NAME, DEFAULT_TABLESPACE_NAME);
-
- // TPC-H Schema for Complex Queries
- String [] tables = {
- "part", "supplier", "partsupp", "nation", "region", "lineitem", "orders", "customer", "customer_parts"
- };
- int [] volumes = {
- 100, 200, 50, 5, 5, 800, 300, 100, 707
- };
- tpch = new TPCH();
- tpch.loadSchemas();
- tpch.loadOutSchema();
- for (int i = 0; i < tables.length; i++) {
- TableMeta m = CatalogUtil.newTableMeta("CSV");
- TableStats stats = new TableStats();
- stats.setNumBytes(volumes[i]);
- TableDesc d = CatalogUtil.newTableDesc(
- CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, tables[i]), tpch.getSchema(tables[i]), m,
- CommonTestingUtil.getTestDir());
- d.setStats(stats);
-
- if (tables[i].equals(TPCH.CUSTOMER_PARTS)) {
- Schema expressionSchema = new Schema();
- expressionSchema.addColumn("c_nationkey", TajoDataTypes.Type.INT4);
- PartitionMethodDesc partitionMethodDesc = new PartitionMethodDesc(
- DEFAULT_DATABASE_NAME,
- tables[i],
- CatalogProtos.PartitionType.COLUMN,
- "c_nationkey",
- expressionSchema);
-
- d.setPartitionMethod(partitionMethodDesc);
- }
- catalog.createTable(d);
- }
-
- sqlAnalyzer = new SQLAnalyzer();
- planner = new LogicalPlanner(catalog);
- optimizer = new LogicalOptimizer(util.getConfiguration());
- globalPlanner = new GlobalPlanner(util.getConfiguration(), catalog);
- }
-
- @AfterClass
- public static void tearDown() {
- util.shutdownCatalogCluster();
- }
-
- private MasterPlan buildPlan(String sql) throws PlanningException, IOException {
- Expr expr = sqlAnalyzer.parse(sql);
- QueryContext context = LocalTajoTestingUtility.createDummyContext(util.getConfiguration());
- LogicalPlan plan = planner.createPlan(context, expr);
- optimizer.optimize(context, plan);
- MasterPlan masterPlan = new MasterPlan(LocalTajoTestingUtility.newQueryId(), context, plan);
- globalPlanner.build(masterPlan);
- return masterPlan;
- }
-
- @Test
- public void testSelectDistinct() throws Exception {
- buildPlan("select distinct l_orderkey from lineitem");
- }
-
- @Test
- public void testSortAfterGroupBy() throws Exception {
- buildPlan("select max(l_quantity) as max_quantity, l_orderkey from lineitem group by l_orderkey order by max_quantity");
- }
-
- @Test
- public void testSortLimit() throws Exception {
- buildPlan("select max(l_quantity) as max_quantity, l_orderkey from lineitem group by l_orderkey order by max_quantity limit 3");
- }
-
- @Test
- public void testJoin() throws Exception {
- buildPlan("select n_name, r_name, n_regionkey, r_regionkey from nation, region");
- }
-
- @Test
- public void testThetaJoinKeyPairs() throws Exception {
- StringBuilder sb = new StringBuilder();
- sb.append("select n_nationkey, n_name, n_regionkey, t.cnt");
- sb.append(" from nation n");
- sb.append(" join");
- sb.append(" (");
- sb.append(" select r_regionkey, count(*) as cnt");
- sb.append(" from nation n");
- sb.append(" join region r on (n.n_regionkey = r.r_regionkey)");
- sb.append(" group by r_regionkey");
- sb.append(" ) t on (n.n_regionkey = t.r_regionkey)");
- sb.append(" and n.n_nationkey > t.cnt ");
- sb.append(" order by n_nationkey");
-
- MasterPlan plan = buildPlan(sb.toString());
- ExecutionBlock root = plan.getRoot();
-
- Map<BinaryEval, Boolean> evalMap = TUtil.newHashMap();
- BinaryEval eval1 = new BinaryEval(EvalType.EQUAL
- , new FieldEval(new Column("default.n.n_regionkey", TajoDataTypes.Type.INT4))
- , new FieldEval(new Column("default.t.r_regionkey", TajoDataTypes.Type.INT4))
- );
- evalMap.put(eval1, Boolean.FALSE);
-
- BinaryEval eval2 = new BinaryEval(EvalType.EQUAL
- , new FieldEval(new Column("default.n.n_nationkey", TajoDataTypes.Type.INT4))
- , new FieldEval(new Column("default.t.cnt", TajoDataTypes.Type.INT4))
- );
- evalMap.put(eval2, Boolean.FALSE);
-
- visitChildExecutionBLock(plan, root, evalMap);
-
- // Find required shuffleKey.
- assertTrue(evalMap.get(eval1).booleanValue());
-
- // Find that ShuffleKeys only includes equi-join conditions
- assertFalse(evalMap.get(eval2).booleanValue());
- }
-
- private void visitChildExecutionBLock(MasterPlan plan, ExecutionBlock parentBlock,
- Map<BinaryEval, Boolean> qualMap) throws Exception {
- boolean isExistLeftField, isExistRightField;
-
- for (Map.Entry<BinaryEval, Boolean> entry : qualMap.entrySet()) {
- FieldEval leftField = (FieldEval)entry.getKey().getLeftExpr();
- FieldEval rightField = (FieldEval)entry.getKey().getRightExpr();
-
- for (ExecutionBlock block : plan.getChilds(parentBlock)) {
- isExistLeftField = false;
- isExistRightField = false;
-
- if (plan.getIncomingChannels(block.getId()) != null) {
- for (DataChannel channel :plan.getIncomingChannels(block.getId())) {
- if (channel.getShuffleKeys() != null) {
- for (Column column : channel.getShuffleKeys()) {
- if (column.getQualifiedName().equals(leftField.getColumnRef().getQualifiedName())) {
- isExistLeftField = true;
- } else if (column.getQualifiedName().
- equals(rightField.getColumnRef().getQualifiedName())) {
- isExistRightField = true;
- }
- }
- }
- }
-
- if(isExistLeftField && isExistRightField) {
- qualMap.put(entry.getKey(), Boolean.TRUE);
- }
- }
-
- visitChildExecutionBLock(plan, block, qualMap);
- }
- }
- }
-
- @Test
- public void testUnion() throws IOException, PlanningException {
- buildPlan("select o_custkey as num from orders union select c_custkey as num from customer union select p_partkey as num from part");
- }
-
- @Test
- public void testSubQuery() throws IOException, PlanningException {
- buildPlan("select l.l_orderkey from (select * from lineitem) l");
- }
-
- @Test
- public void testSubQueryJoin() throws IOException, PlanningException {
- buildPlan("select l.l_orderkey from (select * from lineitem) l join (select * from orders) o on l.l_orderkey = o.o_orderkey");
- }
-
- @Test
- public void testSubQueryGroupBy() throws IOException, PlanningException {
- buildPlan("select sum(l_extendedprice*l_discount) as revenue from (select * from lineitem) as l");
- }
-
- @Test
- public void testSubQueryGroupBy2() throws IOException, PlanningException {
- buildPlan("select l_orderkey, sum(l_extendedprice*l_discount) as revenue from (select * from lineitem) as l group by l_orderkey");
- }
-
- @Test
- public void testSubQuerySortAfterGroup() throws IOException, PlanningException {
- buildPlan("select l_orderkey, sum(l_extendedprice*l_discount) as revenue from (select * from lineitem) as l group by l_orderkey order by l_orderkey");
- }
-
- @Test
- public void testSubQuerySortAfterGroupMultiBlocks() throws IOException, PlanningException {
- buildPlan(
- "select l_orderkey, revenue from (" +
- "select l_orderkey, sum(l_extendedprice*l_discount) as revenue from lineitem group by l_orderkey"
- +") l1"
-
- );
- }
-
- @Test
- public void testSubQuerySortAfterGroupMultiBlocks2() throws IOException, PlanningException {
- buildPlan(
- "select l_orderkey, revenue from (" +
- "select l_orderkey, revenue from (" +
- "select l_orderkey, sum(l_extendedprice*l_discount) as revenue from lineitem group by l_orderkey"
- +") l1" +
- ") l2 order by l_orderkey"
-
- );
- }
-
- @Test
- public void testComplexUnion1() throws Exception {
- buildPlan(FileUtil.readTextFile(new File("src/test/resources/queries/default/complex_union_1.sql")));
- }
-
- @Test
- public void testComplexUnion2() throws Exception {
- buildPlan(FileUtil.readTextFile(new File("src/test/resources/queries/default/complex_union_2.sql")));
- }
-
- @Test
- public void testUnionGroupBy1() throws Exception {
- buildPlan("select l_orderkey, sum(l_extendedprice*l_discount) as revenue from (" +
- "select * from lineitem " +
- "union " +
- "select * from lineitem ) l group by l_orderkey");
- }
-
- @Test
- public void testTPCH_Q5() throws Exception {
- buildPlan(FileUtil.readTextFile(new File("benchmark/tpch/q5.sql")));
- }
-
- @Test
- public void testCheckIfSimpleQuery() throws Exception {
- MasterPlan plan = buildPlan("select * from customer");
- assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- //partition table
- plan = buildPlan("select * from customer_parts");
- assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- plan = buildPlan("select * from customer where c_nationkey = 1");
- assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- // c_nationkey is partition column
- plan = buildPlan("select * from customer_parts where c_nationkey = 1");
- assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- // same column order
- plan = buildPlan("select c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_mktsegment, c_comment" +
- " from customer");
- assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- plan = buildPlan("select c_custkey, c_name, c_address, c_phone, c_acctbal, c_mktsegment, c_comment, c_nationkey " +
- " from customer_parts");
- assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- // different column order
- plan = buildPlan("select c_name, c_custkey, c_address, c_nationkey, c_phone, c_acctbal, c_mktsegment, c_comment" +
- " from customer");
- assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- plan = buildPlan("select c_name, c_custkey, c_address, c_phone, c_acctbal, c_mktsegment, c_comment, c_nationkey " +
- " from customer_parts");
- assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
-
- plan = buildPlan("insert into customer_parts " +
- " select c_name, c_custkey, c_address, c_phone, c_acctbal, c_mktsegment, c_comment, c_nationkey " +
- " from customer");
- assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
index b1a27fa..eca7f6d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
@@ -105,7 +105,7 @@ public class TestKillQuery {
QueryContext queryContext = new QueryContext(conf);
MasterPlan masterPlan = new MasterPlan(queryId, queryContext, plan);
GlobalPlanner globalPlanner = new GlobalPlanner(conf, catalog);
- globalPlanner.build(masterPlan);
+ globalPlanner.build(queryContext, masterPlan);
CountDownLatch barrier = new CountDownLatch(1);
MockAsyncDispatch dispatch = new MockAsyncDispatch(barrier, StageEventType.SQ_INIT);
@@ -169,7 +169,7 @@ public class TestKillQuery {
QueryContext queryContext = new QueryContext(conf);
MasterPlan masterPlan = new MasterPlan(queryId, queryContext, plan);
GlobalPlanner globalPlanner = new GlobalPlanner(conf, catalog);
- globalPlanner.build(masterPlan);
+ globalPlanner.build(queryContext, masterPlan);
CountDownLatch barrier = new CountDownLatch(1);
MockAsyncDispatch dispatch = new MockAsyncDispatch(barrier, TajoProtos.QueryState.QUERY_RUNNING);
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestInnerJoinQuery/testBroadcastTwoPartJoin.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestInnerJoinQuery/testBroadcastTwoPartJoin.sql b/tajo-core/src/test/resources/queries/TestInnerJoinQuery/testBroadcastTwoPartJoin.sql
index 5cf3eb7..36c53cd 100644
--- a/tajo-core/src/test/resources/queries/TestInnerJoinQuery/testBroadcastTwoPartJoin.sql
+++ b/tajo-core/src/test/resources/queries/TestInnerJoinQuery/testBroadcastTwoPartJoin.sql
@@ -16,4 +16,4 @@ where
order by
l_orderkey,
p_name,
- n_name
\ No newline at end of file
+ n_name
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.sql b/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.sql
new file mode 100644
index 0000000..802e2b0
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.sql
@@ -0,0 +1,20 @@
+select
+ n_nationkey, n_name, n_regionkey, t.cnt
+from
+ nation n
+ join
+ (
+ select
+ r_regionkey, count(*) as cnt
+ from
+ nation n
+ join
+ region r
+ on (n.n_regionkey = r.r_regionkey)
+ group by
+ r_regionkey
+ ) t
+on
+ (n.n_regionkey = t.r_regionkey) and n.n_nationkey > t.cnt
+order by
+ n_nationkey
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.sql b/tajo-core/src/test/resources/queries/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.sql
new file mode 100644
index 0000000..3e7eaab
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestSortQuery/testSubQuerySortAfterGroupMultiBlocks.sql
@@ -0,0 +1,5 @@
+select l_orderkey, revenue from (
+ select l_orderkey, revenue from (
+ select l_orderkey, sum(l_extendedprice*l_discount) as revenue from lineitem group by l_orderkey
+ ) l1
+) l2 order by l_orderkey
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestTPCH/testTPCHQ5.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestTPCH/testTPCHQ5.sql b/tajo-core/src/test/resources/queries/TestTPCH/testTPCHQ5.sql
new file mode 100644
index 0000000..e7d3d56
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestTPCH/testTPCHQ5.sql
@@ -0,0 +1,24 @@
+select
+ n_name,
+ sum(l_extendedprice * (1 - l_discount)) as revenue
+from
+ customer,
+ orders,
+ lineitem,
+ supplier,
+ nation,
+ region
+where
+ c_custkey = o_custkey and
+ l_orderkey = o_orderkey and
+ l_suppkey = s_suppkey and
+ c_nationkey = s_nationkey and
+ s_nationkey = n_nationkey and
+ n_regionkey = r_regionkey and
+ r_name = 'ASIA' and
+ o_orderdate >= '1994-01-01' and
+ o_orderdate < '1995-01-01'
+group by
+ n_name
+order by
+ revenue desc
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion1.sql b/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion1.sql
new file mode 100644
index 0000000..0ba2909
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion1.sql
@@ -0,0 +1,27 @@
+SELECT
+ l_orderkey,
+ l_partkey,
+ query
+FROM
+ (
+ SELECT
+ l_orderkey,
+ l_partkey,
+ 'abc' as query
+ FROM
+ lineitem
+ WHERE
+ l_orderkey = 1
+
+ UNION ALL
+
+ SELECT
+ l_orderkey,
+ l_partkey,
+ 'bbc' as query
+ FROM
+ lineitem
+ WHERE
+ l_orderkey = 1
+) result
+
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion2.sql b/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion2.sql
new file mode 100644
index 0000000..d54ed27
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestUnionQuery/testComplexUnion2.sql
@@ -0,0 +1,35 @@
+SELECT *
+FROM
+(
+ SELECT
+ l_orderkey,
+ l_partkey,
+ url
+ FROM
+ (
+ SELECT
+ l_orderkey,
+ l_partkey,
+ CASE
+ WHEN
+ l_partkey IS NOT NULL THEN ''
+ WHEN l_orderkey = 1 THEN '1'
+ ELSE
+ '2'
+ END AS url
+ FROM
+ lineitem
+ ) res1
+ JOIN
+ (
+ SELECT
+ *
+ FROM
+ part
+ ) res2
+ ON l_partkey = p_partkey
+) result
+
+
+
+
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/default/complex_union_1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/complex_union_1.sql b/tajo-core/src/test/resources/queries/default/complex_union_1.sql
deleted file mode 100644
index 9020ad7..0000000
--- a/tajo-core/src/test/resources/queries/default/complex_union_1.sql
+++ /dev/null
@@ -1,29 +0,0 @@
-create table xdr_url as
-
-SELECT
- l_orderkey,
- l_partkey,
- query
-FROM
- (
- SELECT
- l_orderkey,
- l_partkey,
- 'abc' as query
- FROM
- lineitem
- WHERE
- l_orderkey = 1
-
- UNION ALL
-
- SELECT
- l_orderkey,
- l_partkey,
- 'bbc' as query
- FROM
- lineitem
- WHERE
- l_orderkey = 1
-) result
-
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/queries/default/complex_union_2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/complex_union_2.sql b/tajo-core/src/test/resources/queries/default/complex_union_2.sql
deleted file mode 100644
index d54ed27..0000000
--- a/tajo-core/src/test/resources/queries/default/complex_union_2.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-SELECT *
-FROM
-(
- SELECT
- l_orderkey,
- l_partkey,
- url
- FROM
- (
- SELECT
- l_orderkey,
- l_partkey,
- CASE
- WHEN
- l_partkey IS NOT NULL THEN ''
- WHEN l_orderkey = 1 THEN '1'
- ELSE
- '2'
- END AS url
- FROM
- lineitem
- ) res1
- JOIN
- (
- SELECT
- *
- FROM
- part
- ) res2
- ON l_partkey = p_partkey
-) result
-
-
-
-
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
index a308b15..fa8c71e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.orders.o_custkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.orders
- 1: type=Broadcast, tables=default.lineitem
- 2: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.part
+ 2: type=Broadcast, tables=default.lineitem
+ 3: type=Broadcast, tables=default.customer
-JOIN(14)(INNER)
- => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
- => target list: default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)
- => out schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- => in schema: {(5) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(2) on default.part
- => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
- => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
- => in schema: {(4) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(0) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
- SCAN(1) on default.orders
- => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.customer
-
-JOIN(15)(INNER)
- => Join Cond: default.customer.c_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.customer.c_custkey (INT4), default.nation.n_name (TEXT)
- => out schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- => in schema: {(4) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- SCAN(3) on default.customer
- => target list: default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)
- => out schema: {(2) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(4) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
- => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.orders.o_custkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.part.p_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
JOIN(16)(INNER)
=> Join Cond: default.orders.o_custkey (INT4) = default.customer.c_custkey (INT4)
=> target list: default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=> in schema: {(5) default.customer.c_custkey (INT4), default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.customer.c_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.customer.c_custkey (INT4), default.nation.n_name (TEXT)
=> out schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- => in schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ SCAN(3) on default.customer
+ => target list: default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)
+ => out schema: {(2) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+ SCAN(4) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
+ => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- => in schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
+ => in schema: {(5) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
+ SCAN(2) on default.part
+ => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
+ => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
+ => in schema: {(4) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ SCAN(1) on default.orders
+ => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.part.p_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=> in schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
index a308b15..fa8c71e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.orders.o_custkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.orders
- 1: type=Broadcast, tables=default.lineitem
- 2: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.part
+ 2: type=Broadcast, tables=default.lineitem
+ 3: type=Broadcast, tables=default.customer
-JOIN(14)(INNER)
- => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
- => target list: default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)
- => out schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- => in schema: {(5) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(2) on default.part
- => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
- => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
- => in schema: {(4) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(0) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
- SCAN(1) on default.orders
- => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.customer
-
-JOIN(15)(INNER)
- => Join Cond: default.customer.c_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.customer.c_custkey (INT4), default.nation.n_name (TEXT)
- => out schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- => in schema: {(4) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- SCAN(3) on default.customer
- => target list: default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)
- => out schema: {(2) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(4) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
- => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.orders.o_custkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.part.p_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
JOIN(16)(INNER)
=> Join Cond: default.orders.o_custkey (INT4) = default.customer.c_custkey (INT4)
=> target list: default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=> in schema: {(5) default.customer.c_custkey (INT4), default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.customer.c_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.customer.c_custkey (INT4), default.nation.n_name (TEXT)
=> out schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- => in schema: {(2) default.customer.c_custkey (INT4), default.nation.n_name (TEXT)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ SCAN(3) on default.customer
+ => target list: default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)
+ => out schema: {(2) default.customer.c_custkey (INT4), default.customer.c_nationkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+ SCAN(4) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
+ => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.lineitem.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
- => in schema: {(3) default.lineitem.l_orderkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT)}
+ => in schema: {(5) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
+ SCAN(2) on default.part
+ => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
+ => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.orders.o_orderkey (INT4)
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)
+ => out schema: {(3) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4)}
+ => in schema: {(4) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ SCAN(1) on default.orders
+ => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.part.p_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=> in schema: {(3) default.lineitem.l_orderkey (INT4), default.nation.n_name (TEXT), default.part.p_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
index 2210ad9..e5b8455 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_name (TEXT) = ?upper_1 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
index 2210ad9..e5b8455 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_name (TEXT) = ?upper_1 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
index 51a0645..7c88933 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_name (TEXT) = name (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
index 51a0645..7c88933 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_name (TEXT) = name (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
index 97fd030..f35d486 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: ?lower_1 (TEXT) = ?lower_2 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
index 97fd030..f35d486 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: ?lower_1 (TEXT) = ?lower_2 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
=> in schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
index 41127e8..fb73ee5 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: name1 (TEXT) = name2 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
=> in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
index 41127e8..fb73ee5 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.n1
- 1: type=Broadcast, tables=default.n2
-SORT(8)
+SORT(10)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(6)(INNER)
=> Join Cond: name1 (TEXT) = name2 (TEXT)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
=> in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Hash.plan
index c11b4c8..0fb22b3 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Hash.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.region.r_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.nation.n_name (TEXT) (asc),default.region.r_name (TEXT) (asc)
JOIN(6)(CROSS)
=> target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.nation.n_name (TEXT) (asc),default.region.r_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Sort.plan
index c11b4c8..0fb22b3 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.1.Sort.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.region.r_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.nation.n_name (TEXT) (asc),default.region.r_name (TEXT) (asc)
JOIN(6)(CROSS)
=> target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.nation.n_name (TEXT) (asc),default.region.r_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
index ed77747..453e12f 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
@@ -32,7 +32,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.customer
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
index ed77747..453e12f 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
@@ -32,7 +32,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.customer
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
[06/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Hash.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Hash.plan
index 483457a..a719990 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Hash.plan
@@ -36,86 +36,57 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
-5: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.supplier
+ 1: type=Broadcast, tables=default.region
-TABLE_SUBQUERY(5) as default.t
- => Targets: CASE WHEN default.t.s_name (TEXT) IS NULL THEN N/O ELSE default.t.s_name (TEXT) END as s1, default.t.n_regionkey (INT4)
- => out schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
- => in schema: {(11) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.s_acctbal (FLOAT8), default.t.s_address (TEXT), default.t.s_comment (TEXT), default.t.s_name (TEXT), default.t.s_nationkey (INT4), default.t.s_phone (TEXT), default.t.s_suppkey (INT4)}
- PROJECTION(4)
- => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT), default.supplier.s_suppkey (INT4), default.supplier.s_name (TEXT), default.supplier.s_address (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_comment (TEXT)
- => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- JOIN(10)(LEFT_OUTER)
- => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(2) on default.supplier
- => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
-
-SCAN(0) on default.region
- => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
- => out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_regionkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
-
-SORT(15)
+SORT(17)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
JOIN(11)(INNER)
=> Join Cond: default.t.n_regionkey (INT4) = default.region.r_regionkey (INT4)
=> target list: default.region.r_name (TEXT), s1 (TEXT)
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(4) default.region.r_name (TEXT), default.region.r_regionkey (INT4), default.t.n_regionkey (INT4), s1 (TEXT)}
- SCAN(14) on eb_0000000000000_0000_000004
+ SCAN(0) on default.region
+ => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
=> out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- => in schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000003
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ TABLE_SUBQUERY(5) as default.t
+ => Targets: CASE WHEN default.t.s_name (TEXT) IS NULL THEN N/O ELSE default.t.s_name (TEXT) END as s1, default.t.n_regionkey (INT4)
=> out schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
- => in schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
+ => in schema: {(11) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.s_acctbal (FLOAT8), default.t.s_address (TEXT), default.t.s_comment (TEXT), default.t.s_name (TEXT), default.t.s_nationkey (INT4), default.t.s_phone (TEXT), default.t.s_suppkey (INT4)}
+ PROJECTION(4)
+ => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT), default.supplier.s_suppkey (INT4), default.supplier.s_name (TEXT), default.supplier.s_address (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_comment (TEXT)
+ => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ JOIN(10)(LEFT_OUTER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(2) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
@@ -129,7 +100,7 @@ Block Id: eb_0000000000000_0000_000006 [ROOT]
SORT(7)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
- SCAN(16) on eb_0000000000000_0000_000005
+ SCAN(18) on eb_0000000000000_0000_000005
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Sort.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Sort.plan
index 483457a..a719990 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen2.Sort.plan
@@ -36,86 +36,57 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
-5: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.supplier
+ 1: type=Broadcast, tables=default.region
-TABLE_SUBQUERY(5) as default.t
- => Targets: CASE WHEN default.t.s_name (TEXT) IS NULL THEN N/O ELSE default.t.s_name (TEXT) END as s1, default.t.n_regionkey (INT4)
- => out schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
- => in schema: {(11) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.s_acctbal (FLOAT8), default.t.s_address (TEXT), default.t.s_comment (TEXT), default.t.s_name (TEXT), default.t.s_nationkey (INT4), default.t.s_phone (TEXT), default.t.s_suppkey (INT4)}
- PROJECTION(4)
- => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT), default.supplier.s_suppkey (INT4), default.supplier.s_name (TEXT), default.supplier.s_address (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_comment (TEXT)
- => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- JOIN(10)(LEFT_OUTER)
- => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(2) on default.supplier
- => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
-
-SCAN(0) on default.region
- => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
- => out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_regionkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.region.r_regionkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
-
-SORT(15)
+SORT(17)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
JOIN(11)(INNER)
=> Join Cond: default.t.n_regionkey (INT4) = default.region.r_regionkey (INT4)
=> target list: default.region.r_name (TEXT), s1 (TEXT)
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(4) default.region.r_name (TEXT), default.region.r_regionkey (INT4), default.t.n_regionkey (INT4), s1 (TEXT)}
- SCAN(14) on eb_0000000000000_0000_000004
+ SCAN(0) on default.region
+ => target list: default.region.r_name (TEXT), default.region.r_regionkey (INT4)
=> out schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- => in schema: {(2) default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000003
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ TABLE_SUBQUERY(5) as default.t
+ => Targets: CASE WHEN default.t.s_name (TEXT) IS NULL THEN N/O ELSE default.t.s_name (TEXT) END as s1, default.t.n_regionkey (INT4)
=> out schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
- => in schema: {(2) s1 (TEXT), default.t.n_regionkey (INT4)}
+ => in schema: {(11) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.s_acctbal (FLOAT8), default.t.s_address (TEXT), default.t.s_comment (TEXT), default.t.s_name (TEXT), default.t.s_nationkey (INT4), default.t.s_phone (TEXT), default.t.s_suppkey (INT4)}
+ PROJECTION(4)
+ => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT), default.supplier.s_suppkey (INT4), default.supplier.s_name (TEXT), default.supplier.s_address (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_acctbal (FLOAT8), default.supplier.s_comment (TEXT)
+ => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ JOIN(10)(LEFT_OUTER)
+ => Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(11) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(2) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
@@ -129,7 +100,7 @@ Block Id: eb_0000000000000_0000_000006 [ROOT]
SORT(7)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
- SCAN(16) on eb_0000000000000_0000_000005
+ SCAN(18) on eb_0000000000000_0000_000005
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
index 9721e73..1d5762f 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
@@ -26,25 +26,24 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.a
- 2: type=Broadcast, tables=default.c
+ 1: type=Broadcast, tables=default.c
JOIN(8)(LEFT_OUTER)
=> Join Cond: default.a.l_orderkey (INT4) = default.c.c_custkey (INT4)
@@ -71,5 +70,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(9) default.b.o_clerk (TEXT), default.b.o_comment (TEXT), default.b.o_custkey (INT4), default.b.o_orderdate (TEXT), default.b.o_orderkey (INT4), default.b.o_orderpriority (TEXT), default.b.o_orderstatus (TEXT), default.b.o_shippriority (INT4), default.b.o_totalprice (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
index 9721e73..1d5762f 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
@@ -26,25 +26,24 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.a
- 2: type=Broadcast, tables=default.c
+ 1: type=Broadcast, tables=default.c
JOIN(8)(LEFT_OUTER)
=> Join Cond: default.a.l_orderkey (INT4) = default.c.c_custkey (INT4)
@@ -71,5 +70,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(9) default.b.o_clerk (TEXT), default.b.o_comment (TEXT), default.b.o_custkey (INT4), default.b.o_orderdate (TEXT), default.b.o_orderkey (INT4), default.b.o_orderpriority (TEXT), default.b.o_orderstatus (TEXT), default.b.o_shippriority (INT4), default.b.o_totalprice (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Hash.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Hash.plan
index b2021fc..2c990f8 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Hash.plan
@@ -33,107 +33,51 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-
-SCAN(0) on default.customer as c
- => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)
- => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
- => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
-
-TABLE_SUBQUERY(3) as default.n
- => Targets: default.n.n_nationkey (INT4)
- => out schema: {(1) default.n.n_nationkey (INT4)}
- => in schema: {(1) default.n.n_nationkey (INT4)}
- PROJECTION(2)
- => Targets: default.nation.n_nationkey (INT4)
- => out schema: {(1) default.nation.n_nationkey (INT4)}
- => in schema: {(1) default.nation.n_nationkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_nationkey (INT4)
- => out schema: {(1) default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-
-JOIN(9)(RIGHT_OUTER)
- => Join Cond: default.n.n_nationkey (INT4) = default.c.c_custkey (INT4)
- => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)
- => out schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
- => in schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000002
- => out schema: {(1) default.n.n_nationkey (INT4)}
- => in schema: {(1) default.n.n_nationkey (INT4)}
- SCAN(12) on eb_0000000000000_0000_000001
- => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
- => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
-
-SCAN(5) on default.region as r
- => target list: default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
- => out schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.c
+ 1: type=Broadcast, tables=default.r
JOIN(10)(INNER)
=> Join Cond: default.r.r_regionkey (INT4) = default.c.c_custkey (INT4)
=> target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
=> out schema: {(12) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
=> in schema: {(12) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000004
+ SCAN(5) on default.region as r
+ => target list: default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
=> out schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
=> in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(14) on eb_0000000000000_0000_000003
+ JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.n.n_nationkey (INT4) = default.c.c_custkey (INT4)
+ => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)
=> out schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
=> in schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
+ TABLE_SUBQUERY(3) as default.n
+ => Targets: default.n.n_nationkey (INT4)
+ => out schema: {(1) default.n.n_nationkey (INT4)}
+ => in schema: {(1) default.n.n_nationkey (INT4)}
+ PROJECTION(2)
+ => Targets: default.nation.n_nationkey (INT4)
+ => out schema: {(1) default.nation.n_nationkey (INT4)}
+ => in schema: {(1) default.nation.n_nationkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_nationkey (INT4)
+ => out schema: {(1) default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(0) on default.customer as c
+ => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)
+ => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
+ => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Sort.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Sort.plan
index b2021fc..2c990f8 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testJoinWithMultipleJoinTypes.Sort.plan
@@ -33,107 +33,51 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-
-SCAN(0) on default.customer as c
- => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)
- => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
- => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
-
-TABLE_SUBQUERY(3) as default.n
- => Targets: default.n.n_nationkey (INT4)
- => out schema: {(1) default.n.n_nationkey (INT4)}
- => in schema: {(1) default.n.n_nationkey (INT4)}
- PROJECTION(2)
- => Targets: default.nation.n_nationkey (INT4)
- => out schema: {(1) default.nation.n_nationkey (INT4)}
- => in schema: {(1) default.nation.n_nationkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_nationkey (INT4)
- => out schema: {(1) default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-
-JOIN(9)(RIGHT_OUTER)
- => Join Cond: default.n.n_nationkey (INT4) = default.c.c_custkey (INT4)
- => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)
- => out schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
- => in schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000002
- => out schema: {(1) default.n.n_nationkey (INT4)}
- => in schema: {(1) default.n.n_nationkey (INT4)}
- SCAN(12) on eb_0000000000000_0000_000001
- => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
- => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
-
-SCAN(5) on default.region as r
- => target list: default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
- => out schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.c.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.c
+ 1: type=Broadcast, tables=default.r
JOIN(10)(INNER)
=> Join Cond: default.r.r_regionkey (INT4) = default.c.c_custkey (INT4)
=> target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
=> out schema: {(12) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
=> in schema: {(12) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4), default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000004
+ SCAN(5) on default.region as r
+ => target list: default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)
=> out schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
=> in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(14) on eb_0000000000000_0000_000003
+ JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.n.n_nationkey (INT4) = default.c.c_custkey (INT4)
+ => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)
=> out schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
=> in schema: {(9) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT), default.n.n_nationkey (INT4)}
+ TABLE_SUBQUERY(3) as default.n
+ => Targets: default.n.n_nationkey (INT4)
+ => out schema: {(1) default.n.n_nationkey (INT4)}
+ => in schema: {(1) default.n.n_nationkey (INT4)}
+ PROJECTION(2)
+ => Targets: default.nation.n_nationkey (INT4)
+ => out schema: {(1) default.nation.n_nationkey (INT4)}
+ => in schema: {(1) default.nation.n_nationkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_nationkey (INT4)
+ => out schema: {(1) default.nation.n_nationkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(0) on default.customer as c
+ => target list: default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)
+ => out schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
+ => in schema: {(8) default.c.c_acctbal (FLOAT8), default.c.c_address (TEXT), default.c.c_comment (TEXT), default.c.c_custkey (INT4), default.c.c_mktsegment (TEXT), default.c.c_name (TEXT), default.c.c_nationkey (INT4), default.c.c_phone (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
index 9b709e7..9fbfec5 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
@@ -23,40 +23,66 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000001 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
-[Enforcers]
- 0: type=Broadcast, tables=default.orders
- 1: type=Broadcast, tables=default.customer
+SCAN(0) on default.orders
+ => target list: default.orders.o_orderkey (INT4)
+ => out schema: {(1) default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+SCAN(1) on default.customer
+ => target list: default.customer.c_custkey (INT4)
+ => out schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
-SORT(8)
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4), num=32)
+
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(FULL_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
=> target list: default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(1) on default.customer
- => target list: default.customer.c_custkey (INT4)
+ SCAN(9) on eb_0000000000000_0000_000002
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(0) on default.orders
- => target list: default.orders.o_orderkey (INT4)
+ => in schema: {(1) default.customer.c_custkey (INT4)}
+ SCAN(8) on eb_0000000000000_0000_000001
=> out schema: {(1) default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(1) default.orders.o_orderkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
@@ -70,7 +96,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
index 9b709e7..9fbfec5 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
@@ -23,40 +23,66 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000001 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
-[Enforcers]
- 0: type=Broadcast, tables=default.orders
- 1: type=Broadcast, tables=default.customer
+SCAN(0) on default.orders
+ => target list: default.orders.o_orderkey (INT4)
+ => out schema: {(1) default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+SCAN(1) on default.customer
+ => target list: default.customer.c_custkey (INT4)
+ => out schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
-SORT(8)
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4), num=32)
+
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(FULL_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
=> target list: default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(1) on default.customer
- => target list: default.customer.c_custkey (INT4)
+ SCAN(9) on eb_0000000000000_0000_000002
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(0) on default.orders
- => target list: default.orders.o_orderkey (INT4)
+ => in schema: {(1) default.customer.c_custkey (INT4)}
+ SCAN(8) on eb_0000000000000_0000_000001
=> out schema: {(1) default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(1) default.orders.o_orderkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
@@ -70,7 +96,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan
new file mode 100644
index 0000000..fa727c0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan
@@ -0,0 +1,153 @@
+explain
+-------------------------------
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SORT(15)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000005
+
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ SCAN(16) on eb_0000000000000_0000_000005
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
new file mode 100644
index 0000000..fa727c0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
@@ -0,0 +1,153 @@
+explain
+-------------------------------
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SORT(15)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000005
+
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ SCAN(16) on eb_0000000000000_0000_000005
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
+=======================================================
[13/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
TAJO-1553: Improve broadcast join planning. (jihoon)
Closes #583
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/8fd9ae72
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/8fd9ae72
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/8fd9ae72
Branch: refs/heads/master
Commit: 8fd9ae72c70b24c25eaf17d60a832cc7bd7d252c
Parents: 4f3a46c
Author: Jihoon Son <ji...@apache.org>
Authored: Wed May 27 20:16:25 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Wed May 27 20:16:25 2015 +0900
----------------------------------------------------------------------
CHANGES | 2 +
.../BroadcastJoinMarkCandidateVisitor.java | 72 ----
.../planner/BroadcastJoinPlanVisitor.java | 60 ----
.../engine/planner/PhysicalPlannerImpl.java | 2 +-
.../engine/planner/global/ExecutionBlock.java | 117 ++++++-
.../engine/planner/global/GlobalPlanner.java | 263 +-------------
.../tajo/engine/planner/global/MasterPlan.java | 19 +
.../global/builder/DistinctGroupbyBuilder.java | 9 +-
.../BaseGlobalPlanRewriteRuleProvider.java | 6 +-
.../rewriter/GlobalPlanRewriteEngine.java | 5 +-
.../global/rewriter/GlobalPlanRewriteRule.java | 9 +-
.../rewriter/rules/BroadcastJoinRule.java | 348 +++++++++++++++++++
.../rules/GlobalPlanEqualityTester.java | 3 +-
.../rewriter/rules/GlobalPlanRewriteUtil.java | 216 ++++++++++++
.../planner/physical/CommonHashJoinExec.java | 13 +
.../DistinctGroupbyThirdAggregationExec.java | 2 +-
.../NonForwardQueryResultSystemScanner.java | 2 +-
.../apache/tajo/master/exec/QueryExecutor.java | 2 +-
.../tajo/querymaster/DefaultTaskScheduler.java | 2 +-
.../tajo/querymaster/QueryMasterTask.java | 2 +-
.../apache/tajo/querymaster/Repartitioner.java | 62 +---
.../java/org/apache/tajo/querymaster/Stage.java | 7 +-
.../org/apache/tajo/benchmark/TestTPCH.java | 25 +-
.../tajo/engine/query/TestGroupByQuery.java | 6 +-
.../engine/query/TestInnerJoinWithSubQuery.java | 7 +
.../tajo/engine/query/TestOuterJoinQuery.java | 8 +-
.../apache/tajo/engine/query/TestSortQuery.java | 7 +
.../tajo/engine/query/TestUnionQuery.java | 13 +
.../tajo/master/TestExecutionBlockCursor.java | 2 +-
.../apache/tajo/master/TestGlobalPlanner.java | 347 ------------------
.../apache/tajo/querymaster/TestKillQuery.java | 4 +-
.../testBroadcastTwoPartJoin.sql | 2 +-
.../testThetaJoinKeyPairs.sql | 20 ++
.../testSubQuerySortAfterGroupMultiBlocks.sql | 5 +
.../resources/queries/TestTPCH/testTPCHQ5.sql | 24 ++
.../TestUnionQuery/testComplexUnion1.sql | 27 ++
.../TestUnionQuery/testComplexUnion2.sql | 35 ++
.../queries/default/complex_union_1.sql | 29 --
.../queries/default/complex_union_2.sql | 35 --
.../testBroadcastTwoPartJoin.Hash.plan | 135 +++----
.../testBroadcastTwoPartJoin.Sort.plan | 135 +++----
.../testComplexJoinCondition1.Hash.plan | 5 +-
.../testComplexJoinCondition1.Sort.plan | 5 +-
.../testComplexJoinCondition2.Hash.plan | 5 +-
.../testComplexJoinCondition2.Sort.plan | 5 +-
.../testComplexJoinCondition3.Hash.plan | 5 +-
.../testComplexJoinCondition3.Sort.plan | 5 +-
.../testComplexJoinCondition4.Hash.plan | 5 +-
.../testComplexJoinCondition4.Sort.plan | 5 +-
.../testCrossJoin.1.Hash.plan | 7 +-
.../testCrossJoin.1.Sort.plan | 7 +-
.../testCrossJoin.2.Hash.plan | 1 -
.../testCrossJoin.2.Sort.plan | 1 -
.../testCrossJoin.3.Hash.plan | 3 +-
.../testCrossJoin.3.Sort.plan | 3 +-
.../testCrossJoin.4.Hash.plan | 3 +-
.../testCrossJoin.4.Sort.plan | 3 +-
.../testCrossJoin.5.Hash.plan | 7 +-
.../testCrossJoin.5.Sort.plan | 7 +-
.../testCrossJoinAndCaseWhen.Hash.plan | 5 +-
.../testCrossJoinAndCaseWhen.Sort.plan | 5 +-
.../testCrossJoinWithAsterisk1.Hash.plan | 5 +-
.../testCrossJoinWithAsterisk1.Sort.plan | 5 +-
.../testCrossJoinWithAsterisk2.Hash.plan | 7 +-
.../testCrossJoinWithAsterisk2.Sort.plan | 7 +-
.../testCrossJoinWithAsterisk3.Hash.plan | 7 +-
.../testCrossJoinWithAsterisk3.Sort.plan | 7 +-
.../testCrossJoinWithAsterisk4.Hash.plan | 7 +-
.../testCrossJoinWithAsterisk4.Sort.plan | 7 +-
.../testCrossJoinWithEmptyTable1.Hash.plan | 5 +-
.../testCrossJoinWithEmptyTable1.Sort.plan | 5 +-
...sJoinWithThetaJoinConditionInWhere.Hash.plan | 1 -
...sJoinWithThetaJoinConditionInWhere.Sort.plan | 1 -
.../testDifferentTypesJoinCondition.Hash.plan | 1 -
.../testDifferentTypesJoinCondition.Sort.plan | 1 -
.../testInnerJoinAndCaseWhen.Hash.plan | 5 +-
.../testInnerJoinAndCaseWhen.Sort.plan | 5 +-
.../testInnerJoinWithEmptyTable.Hash.plan | 5 +-
.../testInnerJoinWithEmptyTable.Sort.plan | 5 +-
...rJoinWithThetaJoinConditionInWhere.Hash.plan | 3 +-
...rJoinWithThetaJoinConditionInWhere.Sort.plan | 3 +-
.../testJoinAsterisk.Hash.plan | 1 -
.../testJoinAsterisk.Sort.plan | 1 -
.../testJoinCoReferredEvals1.Hash.plan | 5 +-
.../testJoinCoReferredEvals1.Sort.plan | 5 +-
...tJoinCoReferredEvalsWithSameExprs1.Hash.plan | 7 +-
...tJoinCoReferredEvalsWithSameExprs1.Sort.plan | 7 +-
...tJoinCoReferredEvalsWithSameExprs2.Hash.plan | 11 +-
...tJoinCoReferredEvalsWithSameExprs2.Sort.plan | 11 +-
.../testJoinOnMultipleDatabases.Hash.plan | 135 +++----
.../testJoinOnMultipleDatabases.Sort.plan | 135 +++----
.../testJoinWithMultipleJoinQual1.Hash.plan | 137 +++-----
.../testJoinWithMultipleJoinQual1.Sort.plan | 137 +++-----
.../testJoinWithOrPredicates.Hash.plan | 7 +-
.../testJoinWithOrPredicates.Sort.plan | 7 +-
.../testNaturalJoin.Hash.plan | 7 +-
.../testNaturalJoin.Sort.plan | 7 +-
.../TestInnerJoinQuery/testTPCHQ2Join.Hash.plan | 137 +++-----
.../TestInnerJoinQuery/testTPCHQ2Join.Sort.plan | 137 +++-----
.../testWhereClauseJoin1.Hash.plan | 5 +-
.../testWhereClauseJoin1.Sort.plan | 5 +-
.../testWhereClauseJoin2.Hash.plan | 5 +-
.../testWhereClauseJoin2.Sort.plan | 5 +-
.../testWhereClauseJoin3.Hash.plan | 5 +-
.../testWhereClauseJoin3.Sort.plan | 5 +-
.../testWhereClauseJoin4.Hash.plan | 7 +-
.../testWhereClauseJoin4.Sort.plan | 7 +-
.../testWhereClauseJoin5.Hash.plan | 33 +-
.../testWhereClauseJoin5.Sort.plan | 33 +-
.../testWhereClauseJoin6.Hash.plan | 37 +-
.../testWhereClauseJoin6.Sort.plan | 37 +-
.../testBroadcastSubquery.Hash.plan | 118 ++-----
.../testBroadcastSubquery.Sort.plan | 118 ++-----
.../testBroadcastSubquery2.Hash.plan | 180 ++++------
.../testBroadcastSubquery2.Sort.plan | 180 ++++------
.../testComplexJoinCondition5.Hash.plan | 69 ++--
.../testComplexJoinCondition5.Sort.plan | 69 ++--
.../testComplexJoinCondition6.Hash.plan | 94 ++---
.../testComplexJoinCondition6.Sort.plan | 94 ++---
.../testComplexJoinCondition7.Hash.plan | 94 ++---
.../testComplexJoinCondition7.Sort.plan | 94 ++---
.../testJoinWithMultipleJoinQual2.Hash.plan | 88 ++---
.../testJoinWithMultipleJoinQual2.Sort.plan | 88 ++---
.../testJoinWithMultipleJoinQual3.Hash.plan | 109 ++----
.../testJoinWithMultipleJoinQual3.Sort.plan | 109 ++----
.../testJoinWithMultipleJoinQual4.Hash.plan | 109 ++----
.../testJoinWithMultipleJoinQual4.Sort.plan | 109 ++----
.../testThetaJoinKeyPairs.Hash.plan | 142 ++++++++
.../testThetaJoinKeyPairs.Hash_NoBroadcast.plan | 196 +++++++++++
.../testThetaJoinKeyPairs.Sort.plan | 142 ++++++++
.../testThetaJoinKeyPairs.Sort_NoBroadcast.plan | 196 +++++++++++
.../testThetaJoinKeyPairs.result | 27 ++
.../testComplexJoinsWithCaseWhen.Hash.plan | 33 +-
.../testComplexJoinsWithCaseWhen.Sort.plan | 33 +-
.../testComplexJoinsWithCaseWhen2.Hash.plan | 91 ++---
.../testComplexJoinsWithCaseWhen2.Sort.plan | 91 ++---
.../testInnerAndOuterWithEmpty.1.Hash.plan | 17 +-
.../testInnerAndOuterWithEmpty.1.Sort.plan | 17 +-
.../testJoinWithMultipleJoinTypes.Hash.plan | 108 ++----
.../testJoinWithMultipleJoinTypes.Sort.plan | 108 ++----
.../testFullOuterJoin1.Hash.plan | 58 +++-
.../testFullOuterJoin1.Sort.plan | 58 +++-
...lOuterJoinPredicationCaseByCase1.1.Hash.plan | 153 ++++++++
...edicationCaseByCase1.1.Hash_NoBroadcast.plan | 153 ++++++++
...lOuterJoinPredicationCaseByCase1.1.Sort.plan | 153 ++++++++
...edicationCaseByCase1.1.Sort_NoBroadcast.plan | 153 ++++++++
...FullOuterJoinPredicationCaseByCase1.1.result | 9 +
.../testFullOuterJoinWithEmptyTable1.Hash.plan | 58 +++-
.../testFullOuterJoinWithEmptyTable1.Sort.plan | 58 +++-
...testJoinFilterOfRowPreservedTable1.Hash.plan | 4 +-
...testJoinFilterOfRowPreservedTable1.Sort.plan | 4 +-
.../testLeftOuterJoin1.Hash.plan | 4 +-
.../testLeftOuterJoin1.Sort.plan | 4 +-
.../testLeftOuterJoin2.Hash.plan | 14 +-
.../testLeftOuterJoin2.Sort.plan | 14 +-
.../testLeftOuterJoin3.Hash.plan | 22 +-
.../testLeftOuterJoin3.Sort.plan | 22 +-
...tOuterJoinPredicationCaseByCase1.1.Hash.plan | 14 +-
...tOuterJoinPredicationCaseByCase1.1.Sort.plan | 14 +-
...tOuterJoinPredicationCaseByCase2.1.Hash.plan | 18 +-
...tOuterJoinPredicationCaseByCase2.1.Sort.plan | 18 +-
...uterJoinPredicationCaseByCase2_1.1.Hash.plan | 21 +-
...uterJoinPredicationCaseByCase2_1.1.Sort.plan | 21 +-
...tOuterJoinPredicationCaseByCase3.1.Hash.plan | 14 +-
...tOuterJoinPredicationCaseByCase3.1.Sort.plan | 14 +-
...tOuterJoinPredicationCaseByCase4.1.Hash.plan | 14 +-
...tOuterJoinPredicationCaseByCase4.1.Sort.plan | 14 +-
...tOuterJoinPredicationCaseByCase5.1.Hash.plan | 14 +-
...tOuterJoinPredicationCaseByCase5.1.Sort.plan | 14 +-
...tOuterJoinPredicationCaseByCase6.1.Hash.plan | 14 +-
...tOuterJoinPredicationCaseByCase6.1.Sort.plan | 14 +-
...testLeftOuterJoinWithConstantExpr1.Hash.plan | 4 +-
...testLeftOuterJoinWithConstantExpr1.Sort.plan | 4 +-
.../testLeftOuterJoinWithEmptyTable1.Hash.plan | 4 +-
.../testLeftOuterJoinWithEmptyTable1.Sort.plan | 4 +-
.../testLeftOuterJoinWithEmptyTable2.Hash.plan | 8 +-
.../testLeftOuterJoinWithEmptyTable2.Sort.plan | 8 +-
.../testLeftOuterJoinWithEmptyTable3.Hash.plan | 12 +-
.../testLeftOuterJoinWithEmptyTable3.Sort.plan | 12 +-
.../testLeftOuterJoinWithEmptyTable4.Hash.plan | 8 +-
.../testLeftOuterJoinWithEmptyTable4.Sort.plan | 8 +-
.../testLeftOuterJoinWithEmptyTable5.Hash.plan | 8 +-
.../testLeftOuterJoinWithEmptyTable5.Sort.plan | 8 +-
.../testLeftOuterJoinWithNull1.Hash.plan | 4 +-
.../testLeftOuterJoinWithNull1.Sort.plan | 4 +-
.../testLeftOuterJoinWithNull2.Hash.plan | 4 +-
.../testLeftOuterJoinWithNull2.Sort.plan | 4 +-
.../testLeftOuterJoinWithNull3.Hash.plan | 4 +-
.../testLeftOuterJoinWithNull3.Sort.plan | 4 +-
...leBroadcastDataFileWithZeroLength2.Hash.plan | 14 +-
...leBroadcastDataFileWithZeroLength2.Sort.plan | 14 +-
.../testOuterJoinAndCaseWhen1.Hash.plan | 30 +-
.../testOuterJoinAndCaseWhen1.Sort.plan | 30 +-
.../testRightOuterJoin1.Hash.plan | 4 +-
.../testRightOuterJoin1.Sort.plan | 4 +-
...tOuterJoinPredicationCaseByCase1.1.Hash.plan | 101 ++++++
...edicationCaseByCase1.1.Hash_NoBroadcast.plan | 128 +++++++
...tOuterJoinPredicationCaseByCase1.1.Sort.plan | 101 ++++++
...edicationCaseByCase1.1.Sort_NoBroadcast.plan | 128 +++++++
...ightOuterJoinPredicationCaseByCase1.1.result | 4 +
...tOuterJoinPredicationCaseByCase2.1.Hash.plan | 76 ++++
...edicationCaseByCase2.1.Hash_NoBroadcast.plan | 132 +++++++
...tOuterJoinPredicationCaseByCase2.1.Sort.plan | 76 ++++
...edicationCaseByCase2.1.Sort_NoBroadcast.plan | 132 +++++++
...ightOuterJoinPredicationCaseByCase2.1.result | 4 +
...tOuterJoinPredicationCaseByCase3.1.Hash.plan | 101 ++++++
...edicationCaseByCase3.1.Hash_NoBroadcast.plan | 128 +++++++
...tOuterJoinPredicationCaseByCase3.1.Sort.plan | 101 ++++++
...edicationCaseByCase3.1.Sort_NoBroadcast.plan | 128 +++++++
...ightOuterJoinPredicationCaseByCase3.1.result | 4 +
.../testRightOuterJoinWithEmptyTable1.Hash.plan | 4 +-
.../testRightOuterJoinWithEmptyTable1.Sort.plan | 4 +-
...testLeftOuterJoinWithConstantExpr2.Hash.plan | 69 ++--
...testLeftOuterJoinWithConstantExpr2.Sort.plan | 69 ++--
...tLeftOuterJoinWithEmptySubquery1.1.Hash.plan | 96 ++---
...tLeftOuterJoinWithEmptySubquery1.1.Sort.plan | 96 ++---
...tLeftOuterJoinWithEmptySubquery2.1.Hash.plan | 88 ++---
...tLeftOuterJoinWithEmptySubquery2.1.Sort.plan | 88 ++---
.../testSubQuerySortAfterGroupMultiBlocks.plan | 112 ++++++
...testSubQuerySortAfterGroupMultiBlocks.result | 5 +
.../results/TestTPCH/testQ1OrderBy.plan | 88 +++++
.../results/TestTPCH/testQ1OrderBy.result | 2 +-
.../results/TestTPCH/testQ2FourJoins.plan | 228 ++++++++++++
.../results/TestTPCH/testQ2FourJoins.result | 2 +-
.../results/TestTPCH/testTPCH14Expr.plan | 119 +++++++
.../results/TestTPCH/testTPCH14Expr.result | 2 +-
.../resources/results/TestTPCH/testTPCHQ5.plan | 332 ++++++++++++++++++
.../results/TestTPCH/testTPCHQ5.result | 2 +
.../TestUnionQuery/testComplexUnion1.plan | 80 +++++
.../TestUnionQuery/testComplexUnion1.result | 6 +
.../TestUnionQuery/testComplexUnion2.plan | 116 +++++++
.../TestUnionQuery/testComplexUnion2.result | 7 +
.../plan/expr/AggregationFunctionCallEval.java | 63 ++--
.../function/python/PythonScriptEngine.java | 17 +-
.../plan/function/python/TajoScriptEngine.java | 13 +-
.../tajo/plan/logical/CreateTableNode.java | 5 +
.../org/apache/tajo/plan/logical/JoinNode.java | 22 +-
.../plan/rewrite/rules/FilterPushDownRule.java | 1 +
.../tajo/plan/serder/EvalNodeDeserializer.java | 14 +-
.../tajo/plan/serder/EvalNodeSerializer.java | 4 +-
.../plan/serder/LogicalNodeDeserializer.java | 5 -
.../tajo/plan/serder/LogicalNodeSerializer.java | 18 +-
tajo-plan/src/main/proto/Plan.proto | 12 +-
243 files changed, 6687 insertions(+), 4087 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index aeda418..da63606 100644
--- a/CHANGES
+++ b/CHANGES
@@ -27,6 +27,8 @@ Release 0.11.0 - unreleased
IMPROVEMENT
+ TAJO-1553: Improve broadcast join planning. (jihoon)
+
TAJO-1577: Add test cases to verify join plans. (jihoon)
TAJO-1607: Tajo Rest Cache-Id should be bigger than zero. (Contributed by
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinMarkCandidateVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinMarkCandidateVisitor.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinMarkCandidateVisitor.java
deleted file mode 100644
index 6b3dc48..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinMarkCandidateVisitor.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.engine.planner;
-
-import org.apache.tajo.engine.planner.global.GlobalPlanner;
-import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
-import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
-import org.apache.tajo.plan.logical.JoinNode;
-import org.apache.tajo.plan.logical.LogicalNode;
-import org.apache.tajo.plan.logical.NodeType;
-import org.apache.tajo.plan.logical.ScanNode;
-
-import java.util.Stack;
-
-public class BroadcastJoinMarkCandidateVisitor extends BasicLogicalPlanVisitor<GlobalPlanner.GlobalPlanContext, LogicalNode> {
- @Override
- public LogicalNode visitJoin(GlobalPlanner.GlobalPlanContext context, LogicalPlan plan, LogicalPlan.QueryBlock block,
- JoinNode node, Stack<LogicalNode> stack) throws PlanningException {
- LogicalNode leftChild = node.getLeftChild();
- LogicalNode rightChild = node.getRightChild();
-
- if (ScanNode.isScanNode(leftChild) && ScanNode.isScanNode(rightChild)) {
- node.setCandidateBroadcast(true);
- return node;
- }
-
- if(!ScanNode.isScanNode(leftChild)) {
- visit(context, plan, block, leftChild, stack);
- }
-
- if(!ScanNode.isScanNode(rightChild)) {
- visit(context, plan, block, rightChild, stack);
- }
-
- if(isBroadcastCandidateNode(leftChild) &&
- isBroadcastCandidateNode(rightChild)) {
- node.setCandidateBroadcast(true);
- }
-
- return node;
- }
-
- public static boolean isBroadcastCandidateNode(LogicalNode node) {
- if(node.getType() == NodeType.SCAN ||
- node.getType() == NodeType.PARTITIONS_SCAN) {
- return true;
- }
-
- if(node.getType() == NodeType.JOIN && ((JoinNode)node).isCandidateBroadcast()) {
- return true;
- }
-
- return false;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinPlanVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinPlanVisitor.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinPlanVisitor.java
deleted file mode 100644
index bd8efbe..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/BroadcastJoinPlanVisitor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.engine.planner;
-
-import org.apache.tajo.engine.planner.global.GlobalPlanner;
-import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
-import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
-import org.apache.tajo.plan.logical.JoinNode;
-import org.apache.tajo.plan.logical.LogicalNode;
-import org.apache.tajo.plan.logical.NodeType;
-import org.apache.tajo.plan.logical.ScanNode;
-
-import java.util.Stack;
-
-public class BroadcastJoinPlanVisitor extends BasicLogicalPlanVisitor<GlobalPlanner.GlobalPlanContext, LogicalNode> {
- @Override
- public LogicalNode visitJoin(GlobalPlanner.GlobalPlanContext context, LogicalPlan plan, LogicalPlan.QueryBlock block,
- JoinNode node, Stack<LogicalNode> stack) throws PlanningException {
- LogicalNode leftChild = node.getLeftChild();
- LogicalNode rightChild = node.getRightChild();
-
- if (leftChild.getType() == NodeType.JOIN && ScanNode.isScanNode(rightChild)) {
- node.getBroadcastCandidateTargets().add(node);
- }
- LogicalNode parentNode = stack.peek();
- if (parentNode != null && parentNode.getType() == NodeType.JOIN) {
- node.getBroadcastCandidateTargets().addAll(((JoinNode)parentNode).getBroadcastCandidateTargets());
- }
-
- Stack<LogicalNode> currentStack = new Stack<LogicalNode>();
- currentStack.push(node);
- if(!ScanNode.isScanNode(leftChild)) {
- visit(context, plan, block, leftChild, currentStack);
- }
-
- if(!ScanNode.isScanNode(rightChild)) {
- visit(context, plan, block, rightChild, currentStack);
- }
- currentStack.pop();
-
- return node;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
index 0252051..30cb24f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
@@ -34,7 +34,6 @@ import org.apache.tajo.catalog.SortSpec;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.catalog.proto.CatalogProtos.SortSpecProto;
import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.plan.serder.LogicalNodeDeserializer;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.engine.planner.global.DataChannel;
import org.apache.tajo.engine.planner.physical.*;
@@ -47,6 +46,7 @@ import org.apache.tajo.ipc.TajoWorkerProtocol.DistinctGroupbyEnforcer.MultipleAg
import org.apache.tajo.ipc.TajoWorkerProtocol.DistinctGroupbyEnforcer.SortSpecArray;
import org.apache.tajo.plan.LogicalPlan;
import org.apache.tajo.plan.logical.*;
+import org.apache.tajo.plan.serder.LogicalNodeDeserializer;
import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.storage.*;
import org.apache.tajo.storage.fragment.FileFragment;
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/ExecutionBlock.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/ExecutionBlock.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/ExecutionBlock.java
index aecb364..4f352c1 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/ExecutionBlock.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/ExecutionBlock.java
@@ -17,6 +17,7 @@ package org.apache.tajo.engine.planner.global;
import org.apache.tajo.ExecutionBlockId;
import org.apache.tajo.engine.planner.enforce.Enforcer;
import org.apache.tajo.plan.logical.*;
+import org.apache.tajo.util.TUtil;
import java.util.*;
@@ -39,8 +40,56 @@ public class ExecutionBlock {
private boolean hasJoinPlan;
private boolean hasUnionPlan;
-
- private Set<String> broadcasted = new HashSet<String>();
+ private boolean isUnionOnly;
+
+ private Map<String, ScanNode> broadcastRelations = TUtil.newHashMap();
+
+ /*
+ * An execution block is null-supplying or preserved-row when its output is used as an input for outer join.
+ * These properties are decided based on the type of parent execution block's outer join.
+ * Here are brief descriptions for these properties.
+ *
+ * 1) left outer join
+ *
+ * parent eb
+ * -------------------
+ * | left outer join |
+ * -------------------
+ * / \
+ * left child eb right child eb
+ * ----------------- ------------------
+ * | preserved-row | | null-supplying |
+ * ----------------- ------------------
+ *
+ * 2) right outer join
+ *
+ * parent eb
+ * --------------------
+ * | right outer join |
+ * --------------------
+ * / \
+ * left child eb right child eb
+ * ------------------ -----------------
+ * | null-supplying | | preserved-row |
+ * ------------------ -----------------
+ *
+ * 3) full outer join
+ *
+ * parent eb
+ * -------------------
+ * | full outer join |
+ * -------------------
+ * / \
+ * left child eb right child eb
+ * ------------------ ------------------
+ * | null-supplying | | preserved-row |
+ * | preserved-row | | null-supplying |
+ * ------------------ ------------------
+ *
+ * The null-supplying and preserved-row properties are used to find which relations will be broadcasted.
+ */
+ protected boolean nullSuppllying = false;
+ protected boolean preservedRow = false;
public ExecutionBlock(ExecutionBlockId executionBlockId) {
this.executionBlockId = executionBlockId;
@@ -53,6 +102,7 @@ public class ExecutionBlock {
public void setPlan(LogicalNode plan) {
hasJoinPlan = false;
hasUnionPlan = false;
+ isUnionOnly = true;
this.scanlist.clear();
this.plan = plan;
@@ -65,6 +115,12 @@ public class ExecutionBlock {
s.add(node);
while (!s.isEmpty()) {
node = s.remove(s.size()-1);
+ // TODO: the below code should be improved to handle every case
+ if (isUnionOnly && node.getType() != NodeType.ROOT && node.getType() != NodeType.TABLE_SUBQUERY &&
+ node.getType() != NodeType.SCAN && node.getType() != NodeType.PARTITIONS_SCAN &&
+ node.getType() != NodeType.UNION && node.getType() != NodeType.PROJECTION) {
+ isUnionOnly = false;
+ }
if (node instanceof UnaryNode) {
UnaryNode unary = (UnaryNode) node;
s.add(s.size(), unary.getChild());
@@ -86,6 +142,9 @@ public class ExecutionBlock {
store = (StoreTableNode)node;
}
}
+ if (!hasUnionPlan) {
+ isUnionOnly = false;
+ }
}
public void addUnionScan(ExecutionBlockId realScanEbId, ExecutionBlockId delegatedScanEbId) {
@@ -108,6 +167,16 @@ public class ExecutionBlock {
return store;
}
+ public int getNonBroadcastRelNum() {
+ int nonBroadcastRelNum = 0;
+ for (ScanNode scanNode : scanlist) {
+ if (!broadcastRelations.containsKey(scanNode.getCanonicalName())) {
+ nonBroadcastRelNum++;
+ }
+ }
+ return nonBroadcastRelNum;
+ }
+
public ScanNode [] getScanNodes() {
return this.scanlist.toArray(new ScanNode[scanlist.size()]);
}
@@ -120,25 +189,49 @@ public class ExecutionBlock {
return hasUnionPlan;
}
- public void addBroadcastTable(String tableName) {
- broadcasted.add(tableName);
- enforcer.addBroadcast(tableName);
+ public boolean isUnionOnly() {
+ return isUnionOnly;
}
- public void removeBroadcastTable(String tableName) {
- broadcasted.remove(tableName);
- enforcer.removeBroadcast(tableName);
+ public void addBroadcastRelation(ScanNode relationNode) {
+ broadcastRelations.put(relationNode.getCanonicalName(), relationNode);
+ enforcer.addBroadcast(relationNode.getCanonicalName());
}
- public boolean isBroadcastTable(String tableName) {
- return broadcasted.contains(tableName);
+ public void removeBroadcastRelation(ScanNode relationNode) {
+ broadcastRelations.remove(relationNode.getCanonicalName());
+ enforcer.removeBroadcast(relationNode.getCanonicalName());
}
- public Collection<String> getBroadcastTables() {
- return broadcasted;
+ public boolean isBroadcastRelation(ScanNode relationNode) {
+ return broadcastRelations.containsKey(relationNode.getCanonicalName());
+ }
+
+ public boolean hasBroadcastRelation() {
+ return broadcastRelations.size() > 0;
+ }
+
+ public Collection<ScanNode> getBroadcastRelations() {
+ return broadcastRelations.values();
}
public String toString() {
return executionBlockId.toString();
}
+
+ public void setNullSuppllying() {
+ nullSuppllying = true;
+ }
+
+ public void setPreservedRow() {
+ preservedRow = true;
+ }
+
+ public boolean isNullSuppllying() {
+ return nullSuppllying;
+ }
+
+ public boolean isPreservedRow() {
+ return preservedRow;
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index 48b5326..89e887a 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -35,17 +35,15 @@ import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.engine.planner.BroadcastJoinMarkCandidateVisitor;
-import org.apache.tajo.engine.planner.BroadcastJoinPlanVisitor;
import org.apache.tajo.engine.planner.global.builder.DistinctGroupbyBuilder;
import org.apache.tajo.engine.planner.global.rewriter.GlobalPlanRewriteEngine;
import org.apache.tajo.engine.planner.global.rewriter.GlobalPlanRewriteRuleProvider;
+import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.exception.InternalException;
import org.apache.tajo.plan.LogicalPlan;
import org.apache.tajo.plan.PlanningException;
import org.apache.tajo.plan.Target;
import org.apache.tajo.plan.expr.*;
-import org.apache.tajo.plan.function.AggFunction;
import org.apache.tajo.plan.logical.*;
import org.apache.tajo.plan.rewrite.rules.ProjectionPushDownRule;
import org.apache.tajo.plan.util.PlannerUtil;
@@ -119,7 +117,7 @@ public class GlobalPlanner {
/**
* Builds a master plan from the given logical plan.
*/
- public void build(MasterPlan masterPlan) throws IOException, PlanningException {
+ public void build(QueryContext queryContext, MasterPlan masterPlan) throws IOException, PlanningException {
DistributedPlannerVisitor planner = new DistributedPlannerVisitor();
GlobalPlanContext globalPlanContext = new GlobalPlanContext();
@@ -132,19 +130,6 @@ public class GlobalPlanner {
LogicalNode inputPlan = PlannerUtil.clone(masterPlan.getLogicalPlan(),
masterPlan.getLogicalPlan().getRootBlock().getRoot());
- boolean broadcastEnabled = masterPlan.getContext().getBool(SessionVars.TEST_BROADCAST_JOIN_ENABLED);
- if (broadcastEnabled) {
- // pre-visit the master plan in order to find tables to be broadcasted
- // this visiting does not make any execution block and change plan.
- BroadcastJoinMarkCandidateVisitor markCandidateVisitor = new BroadcastJoinMarkCandidateVisitor();
- markCandidateVisitor.visit(globalPlanContext,
- masterPlan.getLogicalPlan(), masterPlan.getLogicalPlan().getRootBlock(), inputPlan, new Stack<LogicalNode>());
-
- BroadcastJoinPlanVisitor broadcastJoinPlanVisitor = new BroadcastJoinPlanVisitor();
- broadcastJoinPlanVisitor.visit(globalPlanContext,
- masterPlan.getLogicalPlan(), masterPlan.getLogicalPlan().getRootBlock(), inputPlan, new Stack<LogicalNode>());
- }
-
// create a distributed execution plan by visiting each logical node.
// Its output is a graph, where each vertex is an execution block, and each edge is a data channel.
// MasterPlan contains them.
@@ -167,9 +152,10 @@ public class GlobalPlanner {
}
masterPlan.setTerminal(terminalBlock);
- LOG.info("\n" + masterPlan.toString());
+ LOG.info("\n\nNon-optimized master plan\n" + masterPlan.toString());
- rewriteEngine.rewrite(masterPlan);
+ masterPlan = rewriteEngine.rewrite(queryContext, masterPlan);
+ LOG.info("\n\nOptimized master plan\n" + masterPlan.toString());
}
private static void setFinalOutputChannel(DataChannel outputChannel, Schema outputSchema) {
@@ -209,187 +195,12 @@ public class GlobalPlanner {
return channel;
}
- /**
- * It calculates the total volume of all descendent relation nodes.
- */
- public static long computeDescendentVolume(LogicalNode node) throws PlanningException {
-
- if (node instanceof RelationNode) {
- switch (node.getType()) {
- case SCAN:
- ScanNode scanNode = (ScanNode) node;
- if (scanNode.getTableDesc().getStats() == null) {
- // TODO - this case means that data is not located in HDFS. So, we need additional
- // broadcast method.
- return Long.MAX_VALUE;
- } else {
- return scanNode.getTableDesc().getStats().getNumBytes();
- }
- case PARTITIONS_SCAN:
- PartitionedTableScanNode pScanNode = (PartitionedTableScanNode) node;
- if (pScanNode.getTableDesc().getStats() == null) {
- // TODO - this case means that data is not located in HDFS. So, we need additional
- // broadcast method.
- return Long.MAX_VALUE;
- } else {
- // if there is no selected partition
- if (pScanNode.getInputPaths() == null || pScanNode.getInputPaths().length == 0) {
- return 0;
- } else {
- return pScanNode.getTableDesc().getStats().getNumBytes();
- }
- }
- case TABLE_SUBQUERY:
- return computeDescendentVolume(((TableSubQueryNode) node).getSubQuery());
- default:
- throw new IllegalArgumentException("Not RelationNode");
- }
- } else if (node instanceof UnaryNode) {
- return computeDescendentVolume(((UnaryNode) node).getChild());
- } else if (node instanceof BinaryNode) {
- BinaryNode binaryNode = (BinaryNode) node;
- return computeDescendentVolume(binaryNode.getLeftChild()) + computeDescendentVolume(binaryNode.getRightChild());
- }
-
- throw new PlanningException("Invalid State");
- }
-
- private static boolean checkIfCanBeOneOfBroadcastJoin(LogicalNode node) {
- return node.getType() == NodeType.SCAN || node.getType() == NodeType.PARTITIONS_SCAN;
- }
-
- /**
- * Get a volume of a table of a partitioned table
- * @param scanNode ScanNode corresponding to a table
- * @return table volume (bytes)
- */
- private static long getTableVolume(ScanNode scanNode) {
- long scanBytes = scanNode.getTableDesc().getStats().getNumBytes();
- if (scanNode.getType() == NodeType.PARTITIONS_SCAN) {
- PartitionedTableScanNode pScanNode = (PartitionedTableScanNode)scanNode;
- if (pScanNode.getInputPaths() == null || pScanNode.getInputPaths().length == 0) {
- scanBytes = 0L;
- }
- }
-
- return scanBytes;
- }
-
private ExecutionBlock buildJoinPlan(GlobalPlanContext context, JoinNode joinNode,
ExecutionBlock leftBlock, ExecutionBlock rightBlock)
throws PlanningException {
MasterPlan masterPlan = context.plan;
ExecutionBlock currentBlock;
- boolean broadcastEnabled = context.getPlan().getContext().getBool(SessionVars.TEST_BROADCAST_JOIN_ENABLED);
- long broadcastTableSizeLimit = context.getPlan().getContext().getLong(SessionVars.BROADCAST_TABLE_SIZE_LIMIT);
-
- // to check when the tajo.dist-query.join.broadcast.auto property is true
- if (broadcastEnabled && joinNode.isCandidateBroadcast()) {
- LogicalNode leftNode = joinNode.getLeftChild();
- LogicalNode rightNode = joinNode.getRightChild();
-
- List<ScanNode> broadcastTargetScanNodes = new ArrayList<ScanNode>();
- int numLargeTables = 0;
- boolean leftBroadcast = false;
- boolean rightBroadcast = false;
-
- // TODO - in the the current implementation, a broadcast join on a bush join tree is not supported yet.
- //
- // Join
- // / \
- // Join Join
- // / \ / \
- // Scan Scan Scan Scan
-
-
- // Checking Left Side of Join
- if (ScanNode.isScanNode(leftNode)) {
- ScanNode scanNode = (ScanNode)leftNode;
- if (joinNode.getJoinType() == JoinType.LEFT_OUTER || getTableVolume(scanNode) >= broadcastTableSizeLimit) {
- numLargeTables++;
- } else {
- leftBroadcast = true;
- broadcastTargetScanNodes.add(scanNode);
- LOG.info("JoinNode's left table " + scanNode.getCanonicalName() + " ("
- + getTableVolume(scanNode) + ") is marked a broadcasted table");
- }
- }
-
- // Checking Right Side OF Join
- if (ScanNode.isScanNode(rightNode)) {
- ScanNode scanNode = (ScanNode)rightNode;
- if (joinNode.getJoinType() == JoinType.RIGHT_OUTER || getTableVolume(scanNode) >= broadcastTableSizeLimit) {
- numLargeTables++;
- } else {
- rightBroadcast = true;
- broadcastTargetScanNodes.add(scanNode);
- LOG.info("JoinNode's right table " + scanNode.getCanonicalName() + " ("
- + getTableVolume(scanNode) + ") is marked a broadcasted table");
- }
- }
-
- JoinNode blockJoinNode = null;
- if (!leftBroadcast && !rightBroadcast) {
- // In the case of large, large, small, small
- // all small tables broadcast to right large table
- numLargeTables = 1;
- }
- for(LogicalNode eachNode: joinNode.getBroadcastCandidateTargets()) {
- if (eachNode.getPID() == joinNode.getPID()) {
- continue;
- }
- if (numLargeTables >= 2) {
- break;
- }
- JoinNode broadcastJoinNode = (JoinNode)eachNode;
- ScanNode scanNode = broadcastJoinNode.getRightChild();
- if (getTableVolume(scanNode) < broadcastTableSizeLimit) {
- broadcastTargetScanNodes.add(scanNode);
- blockJoinNode = broadcastJoinNode;
- LOG.info("The table " + scanNode.getCanonicalName() + " ("
- + getTableVolume(scanNode) + ") is marked a broadcasted table");
- } else {
- numLargeTables++;
- if (numLargeTables < 2) {
- blockJoinNode = broadcastJoinNode;
- }
- }
- }
-
- if (!broadcastTargetScanNodes.isEmpty()) {
- // make new execution block
- currentBlock = masterPlan.newExecutionBlock();
-
- if (!leftBroadcast && !rightBroadcast) {
- DataChannel leftChannel = createDataChannelFromJoin(leftBlock, rightBlock, currentBlock, joinNode, true);
- ScanNode leftScan = buildInputExecutor(masterPlan.getLogicalPlan(), leftChannel);
- joinNode.setLeftChild(leftScan);
- masterPlan.addConnect(leftChannel);
-
- DataChannel rightChannel = createDataChannelFromJoin(leftBlock, rightBlock, currentBlock, joinNode, false);
- ScanNode rightScan = buildInputExecutor(masterPlan.getLogicalPlan(), rightChannel);
- joinNode.setRightChild(rightScan);
- masterPlan.addConnect(rightChannel);
- }
-
- if (blockJoinNode != null) {
- LOG.info("Set execution's plan with join " + blockJoinNode + " for broadcast join");
- // set current execution block's plan with last broadcast join node
- currentBlock.setPlan(blockJoinNode);
- } else {
- currentBlock.setPlan(joinNode);
- }
-
- for (ScanNode eachBroadcastTarget: broadcastTargetScanNodes) {
- currentBlock.addBroadcastTable(eachBroadcastTarget.getCanonicalName());
- context.execBlockMap.remove(eachBroadcastTarget.getPID());
- }
-
- return currentBlock;
- }
- }
-
LogicalNode leftNode = joinNode.getLeftChild();
LogicalNode rightNode = joinNode.getRightChild();
@@ -961,7 +772,7 @@ public class GlobalPlanner {
firstPhaseEvalNames[i] = plan.generateUniqueColumnName(firstPhaseEvals[i]);
FieldEval param = new FieldEval(firstPhaseEvalNames[i], firstPhaseEvals[i].getValueType());
- secondPhaseEvals[i].setFinalPhase();
+ secondPhaseEvals[i].setLastPhase();
secondPhaseEvals[i].setArgs(new EvalNode[]{param});
}
@@ -1355,33 +1166,20 @@ public class GlobalPlanner {
LogicalNode leftChild = visit(context, plan, block, node.getLeftChild(), stack);
ExecutionBlock leftChildBlock = context.execBlockMap.get(leftChild.getPID());
- if (leftChild.getType() == NodeType.JOIN && checkIfCanBeOneOfBroadcastJoin(node.getRightChild())) {
- ScanNode scanNode = node.getRightChild();
- if (leftChildBlock.isBroadcastTable(scanNode.getCanonicalName())) {
- context.execBlockMap.put(node.getPID(), leftChildBlock);
- return node;
- }
-
- // if left execution block's plan is replaced with parent node(join node)
- if (leftChildBlock.getPlan().getPID() == node.getPID()) {
- context.execBlockMap.put(node.getPID(), leftChildBlock);
- return node;
- }
- }
-
LogicalNode rightChild = visit(context, plan, block, node.getRightChild(), stack);
ExecutionBlock rightChildBlock = context.execBlockMap.get(rightChild.getPID());
- // In the case of broadcast join leftChildBlock can be replaced with upper join node.
- // So if the current join node is a child node of leftChildBlock's plan(join node)
- // the current join node already participates in broadcast join.
- LogicalNode leftChildBlockNode = leftChildBlock.getPlan();
- // If child block is union, child block has not plan
- if (leftChildBlockNode != null && leftChildBlockNode.getType() == NodeType.JOIN) {
- if (leftChildBlockNode.getPID() > node.getPID()) {
- context.execBlockMap.put(node.getPID(), leftChildBlock);
- return node;
- }
+ if (node.getJoinType() == JoinType.LEFT_OUTER) {
+ leftChildBlock.setPreservedRow();
+ rightChildBlock.setNullSuppllying();
+ } else if (node.getJoinType() == JoinType.RIGHT_OUTER) {
+ leftChildBlock.setNullSuppllying();
+ rightChildBlock.setPreservedRow();
+ } else if (node.getJoinType() == JoinType.FULL_OUTER) {
+ leftChildBlock.setPreservedRow();
+ leftChildBlock.setNullSuppllying();
+ rightChildBlock.setPreservedRow();
+ rightChildBlock.setNullSuppllying();
}
ExecutionBlock newExecBlock = buildJoinPlan(context, node, leftChildBlock, rightChildBlock);
@@ -1400,7 +1198,7 @@ public class GlobalPlanner {
LogicalPlan.QueryBlock rightQueryBlock = plan.getBlock(node.getRightChild());
LogicalNode rightChild = visit(context, plan, rightQueryBlock, rightQueryBlock.getRoot(), stack);
stack.pop();
-
+
MasterPlan masterPlan = context.getPlan();
List<ExecutionBlock> unionBlocks = Lists.newArrayList();
@@ -1611,29 +1409,4 @@ public class GlobalPlanner {
return node;
}
}
-
- @SuppressWarnings("unused")
- private static class ConsecutiveUnionFinder extends BasicLogicalPlanVisitor<List<UnionNode>, LogicalNode> {
- @Override
- public LogicalNode visitUnion(List<UnionNode> unionNodeList, LogicalPlan plan, LogicalPlan.QueryBlock queryBlock,
- UnionNode node, Stack<LogicalNode> stack)
- throws PlanningException {
- if (node.getType() == NodeType.UNION) {
- unionNodeList.add(node);
- }
-
- stack.push(node);
- TableSubQueryNode leftSubQuery = node.getLeftChild();
- TableSubQueryNode rightSubQuery = node.getRightChild();
- if (leftSubQuery.getSubQuery().getType() == NodeType.UNION) {
- visit(unionNodeList, plan, queryBlock, leftSubQuery, stack);
- }
- if (rightSubQuery.getSubQuery().getType() == NodeType.UNION) {
- visit(unionNodeList, plan, queryBlock, rightSubQuery, stack);
- }
- stack.pop();
-
- return node;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
index 3cca4f2..6e9b74f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/MasterPlan.java
@@ -26,6 +26,7 @@ import org.apache.tajo.QueryId;
import org.apache.tajo.plan.LogicalPlan;
import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.engine.planner.enforce.Enforcer;
+import org.apache.tajo.util.graph.DirectedGraphVisitor;
import org.apache.tajo.util.graph.SimpleDirectedGraph;
import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.ipc.TajoWorkerProtocol;
@@ -108,6 +109,20 @@ public class MasterPlan {
return execBlockMap.get(execBlockId);
}
+ public void removeExecBlock(ExecutionBlockId execBlockId) throws IllegalStateException {
+ List<DataChannel> channels = getIncomingChannels(execBlockId);
+ if (channels != null && channels.size() > 0) {
+ throw new IllegalStateException("Cannot remove execution blocks because some other execution blocks are connected");
+ }
+
+ channels = getOutgoingChannels(execBlockId);
+ if (channels != null && channels.size() > 0) {
+ throw new IllegalStateException("Cannot remove execution blocks because some other execution blocks are connected");
+ }
+
+ execBlockMap.remove(execBlockId);
+ }
+
public void addConnect(DataChannel dataChannel) {
execBlockGraph.addEdge(dataChannel.getSrcId(), dataChannel.getTargetId(), dataChannel);
}
@@ -204,6 +219,10 @@ public class MasterPlan {
return getChild(executionBlock.getId(), idx);
}
+ public void accept(ExecutionBlockId v, DirectedGraphVisitor<ExecutionBlockId> visitor) {
+ execBlockGraph.accept(v, visitor);
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
index 13ed99b..8095458 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
@@ -250,11 +250,6 @@ public class DistinctGroupbyBuilder {
for (DistinctGroupbyNodeBuildInfo buildInfo: distinctNodeBuildInfos.values()) {
GroupbyNode eachGroupbyNode = buildInfo.getGroupbyNode();
List<AggregationFunctionCallEval> groupbyAggFunctions = buildInfo.getAggFunctions();
- String [] firstPhaseEvalNames = new String[groupbyAggFunctions.size()];
- int index = 0;
- for (AggregationFunctionCallEval eachCallEval: groupbyAggFunctions) {
- firstPhaseEvalNames[index++] = eachCallEval.getName();
- }
Target[] targets = new Target[eachGroupbyNode.getGroupingColumns().length + groupbyAggFunctions.size()];
int targetIdx = 0;
@@ -411,7 +406,7 @@ public class DistinctGroupbyBuilder {
buildInfo.addAggFunction(aggFunction);
buildInfo.addAggFunctionTarget(aggFunctionTarget);
} else {
- aggFunction.setFinalPhase();
+ aggFunction.setLastPhase();
otherAggregationFunctionCallEvals.add(aggFunction);
otherAggregationFunctionTargets.add(aggFunctionTarget);
}
@@ -562,6 +557,7 @@ public class DistinctGroupbyBuilder {
}
for (int aggFuncIdx = 0; aggFuncIdx < secondStageGroupbyNode.getAggFunctions().length; aggFuncIdx++) {
+ secondStageGroupbyNode.getAggFunctions()[aggFuncIdx].setLastPhase();
int targetIdx = originGroupColumns.size() + uniqueDistinctColumn.size() + aggFuncIdx;
Target aggFuncTarget = oldTargets[targetIdx];
secondGroupbyTargets.add(aggFuncTarget);
@@ -591,6 +587,7 @@ public class DistinctGroupbyBuilder {
AggregationFunctionCallEval secondStageAggFunction = secondStageGroupbyNode.getAggFunctions()[aggFuncIdx];
secondStageAggFunction.setArgs(new EvalNode[] {firstEval});
+ secondStageAggFunction.setLastPhase();
Target secondTarget = secondStageGroupbyNode.getTargets()[secondStageGroupbyNode.getGroupingColumns().length + aggFuncIdx];
Column column = secondTarget.getNamedColumn();
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/BaseGlobalPlanRewriteRuleProvider.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/BaseGlobalPlanRewriteRuleProvider.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/BaseGlobalPlanRewriteRuleProvider.java
index 96ee2c6..1ae4056 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/BaseGlobalPlanRewriteRuleProvider.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/BaseGlobalPlanRewriteRuleProvider.java
@@ -18,7 +18,9 @@
package org.apache.tajo.engine.planner.global.rewriter;
+import com.google.common.collect.Lists;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.engine.planner.global.rewriter.rules.BroadcastJoinRule;
import org.apache.tajo.util.TUtil;
import java.util.Collection;
@@ -34,6 +36,8 @@ public class BaseGlobalPlanRewriteRuleProvider extends GlobalPlanRewriteRuleProv
@Override
public Collection<Class<? extends GlobalPlanRewriteRule>> getRules() {
- return EMPTY_RULES;
+ List<Class<? extends GlobalPlanRewriteRule>> rules = Lists.newArrayList();
+ rules.add(BroadcastJoinRule.class);
+ return rules;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteEngine.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteEngine.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteEngine.java
index c01ed0e..cc1f3c6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteEngine.java
@@ -20,6 +20,7 @@ package org.apache.tajo.engine.planner.global.rewriter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.tajo.OverridableConf;
import org.apache.tajo.engine.planner.global.MasterPlan;
import org.apache.tajo.plan.PlanningException;
import org.apache.tajo.util.ReflectionUtil;
@@ -67,11 +68,11 @@ public class GlobalPlanRewriteEngine {
* @param plan The plan to be rewritten with all query rewrite rule.
* @return The rewritten plan.
*/
- public MasterPlan rewrite(MasterPlan plan) throws PlanningException {
+ public MasterPlan rewrite(OverridableConf queryContext, MasterPlan plan) throws PlanningException {
GlobalPlanRewriteRule rule;
for (Map.Entry<String, GlobalPlanRewriteRule> rewriteRule : rewriteRules.entrySet()) {
rule = rewriteRule.getValue();
- if (rule.isEligible(plan)) {
+ if (rule.isEligible(queryContext, plan)) {
plan = rule.rewrite(plan);
if (LOG.isDebugEnabled()) {
LOG.debug("The rule \"" + rule.getName() + " \" rewrites the query.");
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteRule.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteRule.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteRule.java
index 4a37207..f30160f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteRule.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/GlobalPlanRewriteRule.java
@@ -18,7 +18,9 @@
package org.apache.tajo.engine.planner.global.rewriter;
+import org.apache.tajo.OverridableConf;
import org.apache.tajo.engine.planner.global.MasterPlan;
+import org.apache.tajo.plan.PlanningException;
/**
* A rewrite rule for global plans
@@ -29,15 +31,16 @@ public interface GlobalPlanRewriteRule {
* Return rule name
* @return Rule name
*/
- public abstract String getName();
+ String getName();
/**
* Check if this rule should be applied.
*
+ * @param queryContext Query context
* @param plan Global Plan
* @return
*/
- public abstract boolean isEligible(MasterPlan plan);
+ boolean isEligible(OverridableConf queryContext, MasterPlan plan);
/**
* Rewrite a global plan
@@ -45,5 +48,5 @@ public interface GlobalPlanRewriteRule {
* @param plan Global Plan
* @return
*/
- public abstract MasterPlan rewrite(MasterPlan plan);
+ MasterPlan rewrite(MasterPlan plan) throws PlanningException;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/BroadcastJoinRule.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/BroadcastJoinRule.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/BroadcastJoinRule.java
new file mode 100644
index 0000000..85b5e10
--- /dev/null
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/BroadcastJoinRule.java
@@ -0,0 +1,348 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.engine.planner.global.rewriter.rules;
+
+import org.apache.tajo.ExecutionBlockId;
+import org.apache.tajo.OverridableConf;
+import org.apache.tajo.SessionVars;
+import org.apache.tajo.engine.planner.global.ExecutionBlock;
+import org.apache.tajo.engine.planner.global.GlobalPlanner;
+import org.apache.tajo.engine.planner.global.MasterPlan;
+import org.apache.tajo.engine.planner.global.rewriter.GlobalPlanRewriteRule;
+import org.apache.tajo.plan.LogicalPlan;
+import org.apache.tajo.plan.PlanningException;
+import org.apache.tajo.plan.logical.*;
+import org.apache.tajo.plan.util.PlannerUtil;
+import org.apache.tajo.util.TUtil;
+import org.apache.tajo.util.graph.DirectedGraphVisitor;
+
+import java.util.*;
+
+/**
+ * {@link BroadcastJoinRule} converts repartition join plan into broadcast join plan.
+ * Broadcast join rules can be defined as follows.
+ *
+ * <h3>Broadcastable relation</h3>
+ * A relation is broadcastable when its size is smaller than a given threshold.
+ *
+ * <h3>Assumetion</h3>
+ * If every input of an execution block is broadcastable, the output of the execution block is also broadcastable.
+ *
+ * <h3>Rules to convert repartition join into broadcast join</h3>
+ * <ul>
+ * <li>Given an EB containing a join and its child EBs, those EBs can be merged into a single EB if at least one child EB's output is broadcastable.</li>
+ * <li>Given a user-defined threshold, the total size of broadcast relations of an EB cannot exceed such threshold.</li>
+ * <ul>
+ * <li>After merging EBs according to the first rule, the result EB may not satisfy the second rule. In this case, enforce repartition join for large relations to satisfy the second rule.</li>
+ * </ul>
+ * <li>Preserved-row relations cannot be broadcasted to avoid duplicated results. That is, full outer join cannot be executed with broadcast join.</li>
+ * <ul>
+ * <li>Here is brief backgrounds for this rule. Data of preserved-row relations will be appeared in the join result regardless of join conditions. If multiple tasks execute outer join with broadcasted preserved-row relations, they emit duplicates results.</li>
+ * <li>Even though a single task can execute outer join when every input is broadcastable, broadcast join is not allowed if one of input relation consists of multiple files.</li>
+ * </ul>
+ * </ul>
+ *
+ */
+public class BroadcastJoinRule implements GlobalPlanRewriteRule {
+
+ private BroadcastJoinPlanBuilder planBuilder;
+ private BroadcastJoinPlanFinalizer planFinalizer;
+
+ @Override
+ public String getName() {
+ return "BroadcastJoinRule";
+ }
+
+ @Override
+ public boolean isEligible(OverridableConf queryContext, MasterPlan plan) {
+ if (queryContext.getBool(SessionVars.TEST_BROADCAST_JOIN_ENABLED)) {
+ for (LogicalPlan.QueryBlock block : plan.getLogicalPlan().getQueryBlocks()) {
+ if (block.hasNode(NodeType.JOIN)) {
+ long broadcastSizeThreshold = queryContext.getLong(SessionVars.BROADCAST_TABLE_SIZE_LIMIT);
+ if (broadcastSizeThreshold > 0) {
+ GlobalPlanRewriteUtil.ParentFinder parentFinder = new GlobalPlanRewriteUtil.ParentFinder();
+ RelationSizeComparator relSizeComparator = new RelationSizeComparator();
+ planBuilder = new BroadcastJoinPlanBuilder(plan, relSizeComparator, parentFinder, broadcastSizeThreshold);
+ planFinalizer = new BroadcastJoinPlanFinalizer(plan, relSizeComparator);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public MasterPlan rewrite(MasterPlan plan) throws PlanningException{
+ plan.accept(plan.getRoot().getId(), planBuilder);
+ plan.accept(plan.getRoot().getId(), planFinalizer);
+ return plan;
+ }
+
+ private static class RelationSizeComparator implements Comparator<ScanNode> {
+
+ @Override
+ public int compare(ScanNode o1, ScanNode o2) {
+ long compare = GlobalPlanRewriteUtil.getTableVolume(o1) - GlobalPlanRewriteUtil.getTableVolume(o2);
+ if (compare == 0) {
+ return 0;
+ } else if (compare > 0) {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+ }
+
+ /**
+ * If a plan contains only broadcast relations, it will be executed at multiple workers who store any broadcast relations.
+ * {@Link BroadcastJoinPlanFinalizer} checks whether every input is the broadcast candidate or not.
+ * If so, it removes the broadcast property from the largest relation.
+ */
+ private static class BroadcastJoinPlanFinalizer implements DirectedGraphVisitor<ExecutionBlockId> {
+ private final MasterPlan plan;
+ private final RelationSizeComparator relSizeComparator;
+
+ public BroadcastJoinPlanFinalizer(MasterPlan plan, RelationSizeComparator relationSizeComparator) {
+ this.plan = plan;
+ this.relSizeComparator = relationSizeComparator;
+ }
+
+ @Override
+ public void visit(Stack<ExecutionBlockId> stack, ExecutionBlockId currentId) {
+ ExecutionBlock current = plan.getExecBlock(currentId);
+ if (!plan.isTerminal(current)) {
+ // When every child is a broadcast candidate, enforce non-broadcast for the largest relation for the join to be
+ // computed at the node who stores such largest relation.
+ if (isFullyBroadcastable(current)) {
+ List<ScanNode> broadcastCandidates = TUtil.newList(current.getBroadcastRelations());
+ Collections.sort(broadcastCandidates, relSizeComparator);
+
+ current.removeBroadcastRelation(broadcastCandidates.remove(broadcastCandidates.size()-1));
+ }
+ }
+ }
+ }
+
+ private static class BroadcastJoinPlanBuilder implements DirectedGraphVisitor<ExecutionBlockId> {
+ private final MasterPlan plan;
+ private final RelationSizeComparator relSizeComparator;
+ private final long broadcastSizeThreshold;
+ private final GlobalPlanRewriteUtil.ParentFinder parentFinder;
+
+ public BroadcastJoinPlanBuilder(MasterPlan plan, RelationSizeComparator relationSizeComparator,
+ GlobalPlanRewriteUtil.ParentFinder parentFinder, long broadcastSizeThreshold) {
+ this.plan = plan;
+ this.relSizeComparator = relationSizeComparator;
+ this.broadcastSizeThreshold = broadcastSizeThreshold;
+ this.parentFinder = parentFinder;
+ }
+
+ @Override
+ public void visit(Stack<ExecutionBlockId> stack, ExecutionBlockId executionBlockId) {
+ ExecutionBlock current = plan.getExecBlock(executionBlockId);
+
+ if (plan.isLeaf(current)) {
+ visitLeafNode(current);
+ } else {
+ visitNonLeafNode(current);
+ }
+ }
+
+ private void visitLeafNode(ExecutionBlock current) {
+ // At leaf execution blocks, find input relations who's size is smaller than the predefined threshold.
+ if (!current.isPreservedRow()) {
+ // Preserved-row relations must not be broadcasted to avoid data duplication.
+ boolean fullyBroadcastable = true;
+ for (ScanNode scanNode : current.getScanNodes()) {
+ if (GlobalPlanRewriteUtil.getTableVolume(scanNode) <= broadcastSizeThreshold) {
+ current.addBroadcastRelation(scanNode);
+ } else {
+ fullyBroadcastable = false;
+ }
+ }
+ if (fullyBroadcastable && current.getScanNodes().length == 1) {
+ try {
+ updateScanOfParentAsBroadcastable(plan, current);
+ } catch (PlanningException e) {
+ // This case is when the current has two or more inputs via union, and simply ignored.
+ }
+ }
+ }
+ }
+
+ private void visitNonLeafNode(ExecutionBlock current) {
+ // At non-leaf execution blocks, merge broadcastable children's plan with the current plan.
+
+ if (!plan.isTerminal(current)) {
+ if (current.hasJoin()) {
+ List<ExecutionBlock> childs = plan.getChilds(current);
+ Map<ExecutionBlockId, ExecutionBlockId> unionScanMap = current.getUnionScanMap();
+
+ if (current.hasBroadcastRelation()) {
+ // The current execution block and its every child are able to be merged.
+ for (ExecutionBlock child : childs) {
+ try {
+ addUnionNodeIfNecessary(unionScanMap, plan, child, current);
+ mergeTwoPhaseJoin(plan, child, current);
+ } catch (PlanningException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ checkTotalSizeOfBroadcastableRelations(current);
+
+ // We assume that if every input of an execution block is broadcastable,
+ // the output of the execution block is also broadcastable.
+ if (!current.isPreservedRow() && isFullyBroadcastable(current)) {
+ try {
+ updateScanOfParentAsBroadcastable(plan, current);
+ } catch (PlanningException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ } else {
+ List<ScanNode> relations = TUtil.newList(current.getBroadcastRelations());
+ for (ScanNode eachRelation : relations) {
+ current.removeBroadcastRelation(eachRelation);
+ }
+ }
+ }
+ }
+
+ /**
+ * When the total size of broadcastable relations exceeds the threshold, enforce repartition join for large ones
+ * in order to broadcast as many relations as possible.
+ *
+ * @param block
+ */
+ private void checkTotalSizeOfBroadcastableRelations(ExecutionBlock block) {
+ List<ScanNode> broadcastCandidates = TUtil.newList();
+ for (ScanNode scanNode : block.getScanNodes()) {
+ long estimatedRelationSize = GlobalPlanRewriteUtil.getTableVolume(scanNode);
+ if (estimatedRelationSize > 0 && estimatedRelationSize <= broadcastSizeThreshold) {
+ broadcastCandidates.add(scanNode);
+ }
+ }
+ Collections.sort(broadcastCandidates, relSizeComparator);
+
+ // Enforce broadcast for candidates in ascending order of relation size
+ long totalBroadcastVolume = 0;
+ int i;
+ for (i = 0; i < broadcastCandidates.size(); i++) {
+ long volumeOfCandidate = GlobalPlanRewriteUtil.getTableVolume(broadcastCandidates.get(i));
+ if (totalBroadcastVolume + volumeOfCandidate > broadcastSizeThreshold) {
+ break;
+ }
+ totalBroadcastVolume += volumeOfCandidate;
+ }
+
+ for (; i < broadcastCandidates.size(); ) {
+ ScanNode nonBroadcast = broadcastCandidates.remove(i);
+ block.removeBroadcastRelation(nonBroadcast);
+ }
+ }
+
+ private void updateScanOfParentAsBroadcastable(MasterPlan plan, ExecutionBlock current) throws PlanningException {
+ ExecutionBlock parent = plan.getParent(current);
+ if (parent != null && !plan.isTerminal(parent)) {
+ ScanNode scanForCurrent = GlobalPlanRewriteUtil.findScanForChildEb(current, parent);
+ parent.addBroadcastRelation(scanForCurrent);
+ }
+ }
+
+ /**
+ * Merge child execution blocks.
+ *
+ * @param plan master plan
+ * @param child child block
+ * @param parent parent block who has join nodes
+ * @return
+ */
+ private ExecutionBlock mergeTwoPhaseJoin(MasterPlan plan, ExecutionBlock child, ExecutionBlock parent)
+ throws PlanningException {
+ ScanNode scanForChild = GlobalPlanRewriteUtil.findScanForChildEb(child, parent);
+
+ parentFinder.set(scanForChild);
+ parentFinder.find(parent.getPlan());
+ LogicalNode parentOfScanForChild = parentFinder.getFound();
+
+ LogicalNode rootOfChild = child.getPlan();
+ if (rootOfChild.getType() == NodeType.STORE) {
+ rootOfChild = ((StoreTableNode)rootOfChild).getChild();
+ }
+
+ GlobalPlanRewriteUtil.replaceChild(rootOfChild, scanForChild, parentOfScanForChild);
+
+ parent = GlobalPlanRewriteUtil.mergeExecutionBlocks(plan, child, parent);
+ parent.removeBroadcastRelation(scanForChild);
+
+ parent.setPlan(parent.getPlan());
+
+ return parent;
+ }
+
+ private void addUnionNodeIfNecessary(Map<ExecutionBlockId, ExecutionBlockId> unionScanMap, MasterPlan plan,
+ ExecutionBlock child, ExecutionBlock current)
+ throws PlanningException {
+ if (unionScanMap != null) {
+ List<ExecutionBlockId> unionScans = TUtil.newList();
+ ExecutionBlockId representativeId = null;
+ if (unionScanMap.containsKey(child.getId())) {
+ representativeId = unionScanMap.get(child.getId());
+ } else if (unionScanMap.containsValue(child.getId())) {
+ representativeId = child.getId();
+ }
+
+ if (representativeId != null) {
+ for (Map.Entry<ExecutionBlockId, ExecutionBlockId> entry : unionScanMap.entrySet()) {
+ if (entry.getValue().equals(representativeId)) {
+ unionScans.add(entry.getKey());
+ }
+ }
+
+ // add unions
+ LogicalNode left, topUnion = null;
+ left = GlobalPlanner.buildInputExecutor(plan.getLogicalPlan(), plan.getChannel(unionScans.get(0), current.getId()));
+ for (int i = 1; i < unionScans.size(); i++) {
+ // left must not be null
+ UnionNode unionNode = plan.getLogicalPlan().createNode(UnionNode.class);
+ unionNode.setLeftChild(left);
+ unionNode.setRightChild(GlobalPlanner.buildInputExecutor(plan.getLogicalPlan(), plan.getChannel(unionScans.get(i), current.getId())));
+ unionNode.setInSchema(left.getOutSchema());
+ unionNode.setOutSchema(left.getOutSchema());
+ topUnion = unionNode;
+ left = unionNode;
+ }
+
+ ScanNode scanForChild = GlobalPlanRewriteUtil.findScanForChildEb(plan.getExecBlock(representativeId), current);
+ PlannerUtil.replaceNode(plan.getLogicalPlan(), current.getPlan(), scanForChild, topUnion);
+
+ current.getUnionScanMap().clear();
+ current.setPlan(current.getPlan());
+ }
+ }
+ }
+ }
+
+ private static boolean isFullyBroadcastable(ExecutionBlock block) {
+ return block.getBroadcastRelations().size() == block.getScanNodes().length;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanEqualityTester.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanEqualityTester.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanEqualityTester.java
index e55a258..9148382 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanEqualityTester.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanEqualityTester.java
@@ -18,6 +18,7 @@
package org.apache.tajo.engine.planner.global.rewriter.rules;
+import org.apache.tajo.OverridableConf;
import org.apache.tajo.engine.planner.global.ExecutionBlock;
import org.apache.tajo.engine.planner.global.ExecutionBlockCursor;
import org.apache.tajo.engine.planner.global.MasterPlan;
@@ -38,7 +39,7 @@ public class GlobalPlanEqualityTester implements GlobalPlanRewriteRule {
}
@Override
- public boolean isEligible(MasterPlan plan) {
+ public boolean isEligible(OverridableConf queryContext, MasterPlan plan) {
return true;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanRewriteUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanRewriteUtil.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanRewriteUtil.java
new file mode 100644
index 0000000..cc98300
--- /dev/null
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/rewriter/rules/GlobalPlanRewriteUtil.java
@@ -0,0 +1,216 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.engine.planner.global.rewriter.rules;
+
+import org.apache.tajo.engine.planner.global.DataChannel;
+import org.apache.tajo.engine.planner.global.ExecutionBlock;
+import org.apache.tajo.engine.planner.global.MasterPlan;
+import org.apache.tajo.plan.PlanningException;
+import org.apache.tajo.plan.logical.*;
+
+import java.util.List;
+
+public class GlobalPlanRewriteUtil {
+ /**
+ * Merge the parent EB with the child EB.
+ *
+ * @param plan
+ * @param child
+ * @param parent
+ * @return
+ */
+ public static ExecutionBlock mergeExecutionBlocks(MasterPlan plan, ExecutionBlock child, ExecutionBlock parent) {
+ for (ScanNode broadcastable : child.getBroadcastRelations()) {
+ parent.addBroadcastRelation(broadcastable);
+ }
+
+ // connect parent and grand children
+ List<ExecutionBlock> grandChilds = plan.getChilds(child);
+ for (ExecutionBlock eachGrandChild : grandChilds) {
+ DataChannel originalChannel = plan.getChannel(eachGrandChild, child);
+ DataChannel newChannel = new DataChannel(eachGrandChild, parent, originalChannel.getShuffleType(),
+ originalChannel.getShuffleOutputNum());
+ newChannel.setSchema(originalChannel.getSchema());
+ newChannel.setShuffleKeys(originalChannel.getShuffleKeys());
+ newChannel.setStoreType(originalChannel.getStoreType());
+ newChannel.setTransmitType(originalChannel.getTransmitType());
+ plan.addConnect(newChannel);
+ plan.disconnect(eachGrandChild, child);
+ }
+
+ plan.disconnect(child, parent);
+ List<DataChannel> channels = plan.getIncomingChannels(child.getId());
+ if (channels == null || channels.size() == 0) {
+ channels = plan.getOutgoingChannels(child.getId());
+ if (channels == null || channels.size() == 0) {
+ plan.removeExecBlock(child.getId());
+ }
+ }
+ return parent;
+ }
+
+ /**
+ * Replace a child of the given parent logical node with the new one.
+ *
+ * @param newChild
+ * @param originalChild
+ * @param parent
+ * @throws PlanningException
+ */
+ public static void replaceChild(LogicalNode newChild, ScanNode originalChild, LogicalNode parent)
+ throws PlanningException {
+ if (parent instanceof UnaryNode) {
+ ((UnaryNode) parent).setChild(newChild);
+ } else if (parent instanceof BinaryNode) {
+ BinaryNode binary = (BinaryNode) parent;
+ if (binary.getLeftChild().equals(originalChild)) {
+ binary.setLeftChild(newChild);
+ } else if (binary.getRightChild().equals(originalChild)) {
+ binary.setRightChild(newChild);
+ } else {
+ throw new PlanningException(originalChild.getPID() + " is not a child of " + parent.getPID());
+ }
+ } else {
+ throw new PlanningException(parent.getPID() + " seems to not have any children");
+ }
+ }
+
+ /**
+ * Find a scan node in the plan of the parent EB corresponding to the output of the child EB.
+ *
+ * @param child
+ * @param parent
+ * @return
+ * @throws PlanningException
+ */
+ public static ScanNode findScanForChildEb(ExecutionBlock child, ExecutionBlock parent) throws PlanningException {
+ ScanNode scanForChild = null;
+ for (ScanNode scanNode : parent.getScanNodes()) {
+ if (scanNode.getTableName().equals(child.getId().toString())) {
+ scanForChild = scanNode;
+ break;
+ }
+ }
+ if (scanForChild == null) {
+ throw new PlanningException("Cannot find any scan nodes for " + child.getId() + " in " + parent.getId());
+ }
+ return scanForChild;
+ }
+
+ /**
+ * Get a volume of a table of a partitioned table
+ * @param scanNode ScanNode corresponding to a table
+ * @return table volume (bytes)
+ */
+ public static long getTableVolume(ScanNode scanNode) {
+ if (scanNode.getTableDesc().hasStats()) {
+ long scanBytes = scanNode.getTableDesc().getStats().getNumBytes();
+ if (scanNode.getType() == NodeType.PARTITIONS_SCAN) {
+ PartitionedTableScanNode pScanNode = (PartitionedTableScanNode) scanNode;
+ if (pScanNode.getInputPaths() == null || pScanNode.getInputPaths().length == 0) {
+ scanBytes = 0L;
+ }
+ }
+
+ return scanBytes;
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * It calculates the total volume of all descendent relation nodes.
+ */
+ public static long computeDescendentVolume(LogicalNode node) throws PlanningException {
+
+ if (node instanceof RelationNode) {
+ switch (node.getType()) {
+ case SCAN:
+ ScanNode scanNode = (ScanNode) node;
+ if (scanNode.getTableDesc().getStats() == null) {
+ // TODO - this case means that data is not located in HDFS. So, we need additional
+ // broadcast method.
+ return Long.MAX_VALUE;
+ } else {
+ return scanNode.getTableDesc().getStats().getNumBytes();
+ }
+ case PARTITIONS_SCAN:
+ PartitionedTableScanNode pScanNode = (PartitionedTableScanNode) node;
+ if (pScanNode.getTableDesc().getStats() == null) {
+ // TODO - this case means that data is not located in HDFS. So, we need additional
+ // broadcast method.
+ return Long.MAX_VALUE;
+ } else {
+ // if there is no selected partition
+ if (pScanNode.getInputPaths() == null || pScanNode.getInputPaths().length == 0) {
+ return 0;
+ } else {
+ return pScanNode.getTableDesc().getStats().getNumBytes();
+ }
+ }
+ case TABLE_SUBQUERY:
+ return computeDescendentVolume(((TableSubQueryNode) node).getSubQuery());
+ default:
+ throw new IllegalArgumentException("Not RelationNode");
+ }
+ } else if (node instanceof UnaryNode) {
+ return computeDescendentVolume(((UnaryNode) node).getChild());
+ } else if (node instanceof BinaryNode) {
+ BinaryNode binaryNode = (BinaryNode) node;
+ return computeDescendentVolume(binaryNode.getLeftChild()) + computeDescendentVolume(binaryNode.getRightChild());
+ }
+
+ throw new PlanningException("Invalid State");
+ }
+
+ public static class ParentFinder implements LogicalNodeVisitor {
+ private LogicalNode target;
+ private LogicalNode found;
+
+ public void set(LogicalNode child) {
+ this.target = child;
+ this.found = null;
+ }
+
+ public void find(LogicalNode root) {
+ this.visit(root);
+ }
+
+ public LogicalNode getFound() throws PlanningException {
+ if (found == null) {
+ throw new PlanningException("Cannot find the parent of " + target.getPID());
+ }
+ return this.found;
+ }
+
+ @Override
+ public void visit(LogicalNode node) {
+ for (int i = 0; i < node.childNum(); i++) {
+ if (node.getChild(i).equals(target)) {
+ found = node;
+ break;
+ } else {
+ if (found == null) {
+ visit(node.getChild(i));
+ }
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/CommonHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/CommonHashJoinExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/CommonHashJoinExec.java
index ff9b253..588f0fc 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/CommonHashJoinExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/CommonHashJoinExec.java
@@ -125,6 +125,19 @@ public abstract class CommonHashJoinExec<T> extends CommonJoinExec {
keyTuple.put(i, tuple.get(rightKeyList[i]));
}
+ /*
+ * TODO
+ * Currently, some physical executors can return new instances of tuple, but others not.
+ * This sometimes causes wrong results due to the singleton Tuple instance.
+ * The below line is a temporal solution to fix this problem.
+ * This will be improved at https://issues.apache.org/jira/browse/TAJO-1343.
+ */
+ try {
+ tuple = tuple.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new IOException(e);
+ }
+
List<Tuple> newValue = map.get(keyTuple);
if (newValue == null) {
map.put(keyTuple, newValue = new ArrayList<Tuple>());
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyThirdAggregationExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyThirdAggregationExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyThirdAggregationExec.java
index 7c38d36..267bd90 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyThirdAggregationExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyThirdAggregationExec.java
@@ -253,7 +253,7 @@ public class DistinctGroupbyThirdAggregationExec extends UnaryPhysicalExec {
if (aggrFunctions != null) {
for (AggregationFunctionCallEval eachFunction: aggrFunctions) {
eachFunction.bind(context.getEvalContext(), inSchema);
- eachFunction.setFinalPhase();
+ eachFunction.setLastPhase();
}
}
newFunctionContext();
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
index 6c1399e..45b23f8 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
@@ -98,7 +98,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
MasterPlan masterPlan = new MasterPlan(queryId, queryContext, logicalPlan);
GlobalPlanner globalPlanner = new GlobalPlanner(masterContext.getConf(), masterContext.getCatalog());
try {
- globalPlanner.build(masterPlan);
+ globalPlanner.build(queryContext, masterPlan);
} catch (PlanningException e) {
throw new RuntimeException(e);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
index 6ab096f..22b8c4c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
@@ -496,7 +496,7 @@ public class QueryExecutor {
}
MasterPlan masterPlan = new MasterPlan(QueryIdFactory.NULL_QUERY_ID, context, plan);
- planner.build(masterPlan);
+ planner.build(context, masterPlan);
return masterPlan;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/querymaster/DefaultTaskScheduler.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/DefaultTaskScheduler.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/DefaultTaskScheduler.java
index 351856f..939de60 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/DefaultTaskScheduler.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/DefaultTaskScheduler.java
@@ -865,7 +865,7 @@ public class DefaultTaskScheduler extends AbstractTaskScheduler {
}
ExecutionBlock parent = masterPlan.getParent(block);
- if (masterPlan.isRoot(parent) && parent.hasUnion()) {
+ if (masterPlan.isRoot(parent) && parent.isUnionOnly()) {
return false;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
index a48f0a0..2809a70 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
@@ -363,7 +363,7 @@ public class QueryMasterTask extends CompositeService {
}
}
MasterPlan masterPlan = new MasterPlan(queryId, queryContext, plan);
- queryMasterContext.getGlobalPlanner().build(masterPlan);
+ queryMasterContext.getGlobalPlanner().build(queryContext, masterPlan);
query = new Query(queryTaskContext, queryId, querySubmitTime,
"", queryTaskContext.getEventHandler(), masterPlan);
[04/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Hash.plan
index af210c2..6640d69 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Hash.plan
@@ -63,7 +63,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(12)(c_custkey)
+GROUP_BY(14)(c_custkey)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
@@ -92,7 +92,7 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t1.c_custkey (INT4), num=32)
-GROUP_BY(14)(c_custkey)
+GROUP_BY(16)(c_custkey)
=> exprs: (count())
=> target list: default.t1.c_custkey (INT4), ?count_6 (INT8)
=> out schema:{(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
@@ -110,7 +110,7 @@ GROUP_BY(14)(c_custkey)
=> target list: default.customer.c_custkey (INT4), total1 (INT8), total2 (TEXT), total3 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), total1 (INT8), total2 (TEXT), total3 (TEXT)}
=> in schema:{(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
- SCAN(13) on eb_0000000000000_0000_000003
+ SCAN(15) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
@@ -124,14 +124,14 @@ Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t1.c_custkey (INT4), num=32)
-SORT(16)
+SORT(18)
=> Sort Keys: default.t1.c_custkey (INT4) (asc)
GROUP_BY(6)(c_custkey)
=> exprs: (count(?count_6 (INT8)))
=> target list: default.t1.c_custkey (INT4), ?count (INT8)
=> out schema:{(2) ?count (INT8), default.t1.c_custkey (INT4)}
=> in schema:{(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
- SCAN(15) on eb_0000000000000_0000_000004
+ SCAN(17) on eb_0000000000000_0000_000004
=> out schema: {(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
=> in schema: {(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
@@ -151,7 +151,7 @@ PROJECTION(8)
=> in schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
SORT(7)
=> Sort Keys: default.t1.c_custkey (INT4) (asc)
- SCAN(17) on eb_0000000000000_0000_000005
+ SCAN(19) on eb_0000000000000_0000_000005
=> out schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
=> in schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Sort.plan
index af210c2..6640d69 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable3.Sort.plan
@@ -63,7 +63,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(12)(c_custkey)
+GROUP_BY(14)(c_custkey)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
@@ -92,7 +92,7 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t1.c_custkey (INT4), num=32)
-GROUP_BY(14)(c_custkey)
+GROUP_BY(16)(c_custkey)
=> exprs: (count())
=> target list: default.t1.c_custkey (INT4), ?count_6 (INT8)
=> out schema:{(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
@@ -110,7 +110,7 @@ GROUP_BY(14)(c_custkey)
=> target list: default.customer.c_custkey (INT4), total1 (INT8), total2 (TEXT), total3 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), total1 (INT8), total2 (TEXT), total3 (TEXT)}
=> in schema:{(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
- SCAN(13) on eb_0000000000000_0000_000003
+ SCAN(15) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), ?sum_3 (INT8), ?max_4 (TEXT), ?max_5 (TEXT)}
@@ -124,14 +124,14 @@ Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t1.c_custkey (INT4), num=32)
-SORT(16)
+SORT(18)
=> Sort Keys: default.t1.c_custkey (INT4) (asc)
GROUP_BY(6)(c_custkey)
=> exprs: (count(?count_6 (INT8)))
=> target list: default.t1.c_custkey (INT4), ?count (INT8)
=> out schema:{(2) ?count (INT8), default.t1.c_custkey (INT4)}
=> in schema:{(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
- SCAN(15) on eb_0000000000000_0000_000004
+ SCAN(17) on eb_0000000000000_0000_000004
=> out schema: {(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
=> in schema: {(2) default.t1.c_custkey (INT4), ?count_6 (INT8)}
@@ -151,7 +151,7 @@ PROJECTION(8)
=> in schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
SORT(7)
=> Sort Keys: default.t1.c_custkey (INT4) (asc)
- SCAN(17) on eb_0000000000000_0000_000005
+ SCAN(19) on eb_0000000000000_0000_000005
=> out schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
=> in schema: {(2) ?count (INT8), default.t1.c_custkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Hash.plan
index 3bb8c1d..5ea0fdd 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Hash.plan
@@ -75,7 +75,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-GROUP_BY(15)()
+GROUP_BY(17)()
=> exprs: (max(default.customer.c_custkey (INT4)),sum(default.orders.o_orderkey (INT4)),max(default.orders.o_orderstatus (TEXT)),max(default.orders.o_orderdate (TEXT)))
=> target list: ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)
=> out schema:{(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
@@ -106,7 +106,7 @@ GROUP_BY(9)()
=> target list: ?max (INT4), ?sum_1 (INT8), ?max_2 (TEXT), ?max_3 (TEXT)
=> out schema:{(4) ?max (INT4), ?max_2 (TEXT), ?max_3 (TEXT), ?sum_1 (INT8)}
=> in schema:{(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
- SCAN(16) on eb_0000000000000_0000_000003
+ SCAN(18) on eb_0000000000000_0000_000003
=> out schema: {(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
=> in schema: {(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
@@ -120,7 +120,7 @@ Block Id: eb_0000000000000_0000_000007 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(17)()
+GROUP_BY(21)()
=> exprs: (max(default.customer.c_custkey (INT4)),sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)
=> out schema:{(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
@@ -151,7 +151,7 @@ GROUP_BY(10)()
=> target list: ?max_5 (INT4), ?sum_6 (INT8), ?max_7 (TEXT), ?max_8 (TEXT)
=> out schema:{(4) ?max_5 (INT4), ?max_7 (TEXT), ?max_8 (TEXT), ?sum_6 (INT8)}
=> in schema:{(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
- SCAN(18) on eb_0000000000000_0000_000007
+ SCAN(22) on eb_0000000000000_0000_000007
=> out schema: {(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
=> in schema: {(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Sort.plan
index 3bb8c1d..5ea0fdd 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable4.Sort.plan
@@ -75,7 +75,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-GROUP_BY(15)()
+GROUP_BY(17)()
=> exprs: (max(default.customer.c_custkey (INT4)),sum(default.orders.o_orderkey (INT4)),max(default.orders.o_orderstatus (TEXT)),max(default.orders.o_orderdate (TEXT)))
=> target list: ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)
=> out schema:{(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
@@ -106,7 +106,7 @@ GROUP_BY(9)()
=> target list: ?max (INT4), ?sum_1 (INT8), ?max_2 (TEXT), ?max_3 (TEXT)
=> out schema:{(4) ?max (INT4), ?max_2 (TEXT), ?max_3 (TEXT), ?sum_1 (INT8)}
=> in schema:{(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
- SCAN(16) on eb_0000000000000_0000_000003
+ SCAN(18) on eb_0000000000000_0000_000003
=> out schema: {(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
=> in schema: {(4) ?max_12 (INT4), ?sum_13 (INT8), ?max_14 (TEXT), ?max_15 (TEXT)}
@@ -120,7 +120,7 @@ Block Id: eb_0000000000000_0000_000007 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(17)()
+GROUP_BY(21)()
=> exprs: (max(default.customer.c_custkey (INT4)),sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)
=> out schema:{(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
@@ -151,7 +151,7 @@ GROUP_BY(10)()
=> target list: ?max_5 (INT4), ?sum_6 (INT8), ?max_7 (TEXT), ?max_8 (TEXT)
=> out schema:{(4) ?max_5 (INT4), ?max_7 (TEXT), ?max_8 (TEXT), ?sum_6 (INT8)}
=> in schema:{(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
- SCAN(18) on eb_0000000000000_0000_000007
+ SCAN(22) on eb_0000000000000_0000_000007
=> out schema: {(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
=> in schema: {(4) ?max_16 (INT4), ?sum_17 (INT8), ?max_18 (TEXT), ?max_19 (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Hash.plan
index b7892e4..a0476d1 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Hash.plan
@@ -48,7 +48,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(9)(l_linenumber)
+GROUP_BY(11)(l_linenumber)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)),avg(default.lineitem.l_quantity (FLOAT8)),sum(default.lineitem.l_quantity (FLOAT8)))
=> target list: default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)
=> out schema:{(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
@@ -77,14 +77,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.lineitem.l_linenumber (INT4), num=32)
-SORT(11)
+SORT(13)
=> Sort Keys: default.lineitem.l_linenumber (INT4) (asc)
GROUP_BY(3)(l_linenumber)
=> exprs: (sum(?sum_7 (INT8)),max(?max_8 (TEXT)),max(?max_9 (TEXT)),avg(?avg_10 (PROTOBUF)),sum(?sum_11 (FLOAT8)))
=> target list: default.lineitem.l_linenumber (INT4), ?sum (INT8), ?max_1 (TEXT), ?max_2 (TEXT), ?avg_3 (FLOAT8), ?sum_4 (FLOAT8)
=> out schema:{(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
=> in schema:{(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
=> in schema: {(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
@@ -100,7 +100,7 @@ Block Id: eb_0000000000000_0000_000005 [ROOT]
SORT(4)
=> Sort Keys: default.lineitem.l_linenumber (INT4) (asc)
- SCAN(12) on eb_0000000000000_0000_000004
+ SCAN(14) on eb_0000000000000_0000_000004
=> out schema: {(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
=> in schema: {(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Sort.plan
index b7892e4..a0476d1 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable5.Sort.plan
@@ -48,7 +48,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(9)(l_linenumber)
+GROUP_BY(11)(l_linenumber)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)),avg(default.lineitem.l_quantity (FLOAT8)),sum(default.lineitem.l_quantity (FLOAT8)))
=> target list: default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)
=> out schema:{(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
@@ -77,14 +77,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.lineitem.l_linenumber (INT4), num=32)
-SORT(11)
+SORT(13)
=> Sort Keys: default.lineitem.l_linenumber (INT4) (asc)
GROUP_BY(3)(l_linenumber)
=> exprs: (sum(?sum_7 (INT8)),max(?max_8 (TEXT)),max(?max_9 (TEXT)),avg(?avg_10 (PROTOBUF)),sum(?sum_11 (FLOAT8)))
=> target list: default.lineitem.l_linenumber (INT4), ?sum (INT8), ?max_1 (TEXT), ?max_2 (TEXT), ?avg_3 (FLOAT8), ?sum_4 (FLOAT8)
=> out schema:{(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
=> in schema:{(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
=> in schema: {(6) default.lineitem.l_linenumber (INT4), ?sum_7 (INT8), ?max_8 (TEXT), ?max_9 (TEXT), ?avg_10 (PROTOBUF), ?sum_11 (FLOAT8)}
@@ -100,7 +100,7 @@ Block Id: eb_0000000000000_0000_000005 [ROOT]
SORT(4)
=> Sort Keys: default.lineitem.l_linenumber (INT4) (asc)
- SCAN(12) on eb_0000000000000_0000_000004
+ SCAN(14) on eb_0000000000000_0000_000004
=> out schema: {(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
=> in schema: {(6) ?avg_3 (FLOAT8), ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), ?sum_4 (FLOAT8), default.lineitem.l_linenumber (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Hash.plan
index 6172720..4de481f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Hash.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderkey (INT4) IS NULL
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Sort.plan
index 6172720..4de481f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull1.Sort.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderkey (INT4) IS NULL
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Hash.plan
index f92351e..f1e2800 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Hash.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderdate (TEXT) IS NOT NULL AND default.orders.o_orderdate (TEXT)LIKE'1996%'
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Sort.plan
index f92351e..f1e2800 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull2.Sort.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderdate (TEXT) IS NOT NULL AND default.orders.o_orderdate (TEXT)LIKE'1996%'
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Hash.plan
index 23ef5fe..5bace36 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Hash.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderkey (INT4) = 100
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Sort.plan
index 23ef5fe..5bace36 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithNull3.Sort.plan
@@ -43,7 +43,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.orders.o_orderkey (INT4) = 100
@@ -73,7 +73,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
=> in schema: {(4) ?coalesce (TEXT), default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Hash.plan
index e9e2176..7b9c695 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Hash.plan
@@ -27,19 +27,19 @@ SELECTION(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -72,5 +72,5 @@ SELECTION(5)
=> in schema: {(8) default.a.c_acctbal (FLOAT8), default.a.c_address (TEXT), default.a.c_comment (TEXT), default.a.c_custkey (INT4), default.a.c_mktsegment (TEXT), default.a.c_name (TEXT), default.a.c_nationkey (INT4), default.a.c_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Sort.plan
index e9e2176..7b9c695 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testMultipleBroadcastDataFileWithZeroLength2.Sort.plan
@@ -27,19 +27,19 @@ SELECTION(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -72,5 +72,5 @@ SELECTION(5)
=> in schema: {(8) default.a.c_acctbal (FLOAT8), default.a.c_address (TEXT), default.a.c_comment (TEXT), default.a.c_custkey (INT4), default.a.c_mktsegment (TEXT), default.a.c_name (TEXT), default.a.c_nationkey (INT4), default.a.c_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
index 58ccb3c..08ded3e 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
@@ -27,31 +27,31 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.b
1: type=Broadcast, tables=default.c
-SORT(11)
+SORT(15)
=> Sort Keys: default.a.id (INT4) (asc),default.a.name (TEXT) (asc)
JOIN(9)(LEFT_OUTER)
=> Join Cond: default.b.id (INT4) = default.c.id (INT4)
@@ -77,21 +77,21 @@ SORT(11)
=> in schema: {(4) default.a.id (INT4), default.a.name (TEXT), default.a.score (FLOAT4), default.a.type (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(5)
=> Sort Keys: default.a.id (INT4) (asc),default.a.name (TEXT) (asc)
- SCAN(12) on eb_0000000000000_0000_000003
+ SCAN(16) on eb_0000000000000_0000_000005
=> out schema: {(6) c1 (TEXT), c2 (TEXT), default.a.id (INT4), default.a.name (TEXT), id2 (INT4), name2 (TEXT)}
=> in schema: {(6) c1 (TEXT), c2 (TEXT), default.a.id (INT4), default.a.name (TEXT), id2 (INT4), name2 (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
index 58ccb3c..08ded3e 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
@@ -27,31 +27,31 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.b
1: type=Broadcast, tables=default.c
-SORT(11)
+SORT(15)
=> Sort Keys: default.a.id (INT4) (asc),default.a.name (TEXT) (asc)
JOIN(9)(LEFT_OUTER)
=> Join Cond: default.b.id (INT4) = default.c.id (INT4)
@@ -77,21 +77,21 @@ SORT(11)
=> in schema: {(4) default.a.id (INT4), default.a.name (TEXT), default.a.score (FLOAT4), default.a.type (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), default.a.name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(5)
=> Sort Keys: default.a.id (INT4) (asc),default.a.name (TEXT) (asc)
- SCAN(12) on eb_0000000000000_0000_000003
+ SCAN(16) on eb_0000000000000_0000_000005
=> out schema: {(6) c1 (TEXT), c2 (TEXT), default.a.id (INT4), default.a.name (TEXT), id2 (INT4), name2 (TEXT)}
=> in schema: {(6) c1 (TEXT), c2 (TEXT), default.a.id (INT4), default.a.name (TEXT), id2 (INT4), name2 (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Hash.plan
index 98c044a..70507fe 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Hash.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(RIGHT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Sort.plan
index 98c044a..70507fe 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoin1.Sort.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(RIGHT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash.plan
new file mode 100644
index 0000000..e0bb3a0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash.plan
@@ -0,0 +1,101 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
+4: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t1
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
new file mode 100644
index 0000000..735f305
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
@@ -0,0 +1,128 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(1) default.t2.id (INT4)}
+ SCAN(10) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort.plan
new file mode 100644
index 0000000..e0bb3a0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort.plan
@@ -0,0 +1,101 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
+4: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t1
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
new file mode 100644
index 0000000..735f305
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
@@ -0,0 +1,128 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(1) default.t2.id (INT4)}
+ SCAN(10) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), default.t2.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4) AND default.t2.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.result b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.result
new file mode 100644
index 0000000..c5da2c4
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase1.1.result
@@ -0,0 +1,4 @@
+id,name,id,id
+-------------------------------
+2,table11-2,2,2
+null,null,null,3
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash.plan
new file mode 100644
index 0000000..22fc8ce
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash.plan
@@ -0,0 +1,76 @@
+explain
+-------------------------------
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t4
+ 1: type=Broadcast, tables=default.t1
+
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan
new file mode 100644
index 0000000..f5486f9
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan
@@ -0,0 +1,132 @@
+explain
+-------------------------------
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort.plan
new file mode 100644
index 0000000..22fc8ce
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort.plan
@@ -0,0 +1,76 @@
+explain
+-------------------------------
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t4
+ 1: type=Broadcast, tables=default.t1
+
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
[08/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
index 7cde4c5..839afaf 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
@@ -73,22 +73,14 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000012)
|-eb_0000000000000_0000_000012
|-eb_0000000000000_0000_000011
|-eb_0000000000000_0000_000010
- |-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000007
-3: eb_0000000000000_0000_000008
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000009
-6: eb_0000000000000_0000_000010
-7: eb_0000000000000_0000_000011
-8: eb_0000000000000_0000_000012
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
+4: eb_0000000000000_0000_000012
-------------------------------------------------------------------------------
=======================================================
@@ -96,13 +88,12 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 3 => 10 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.part
+ 0: type=Broadcast, tables=default.part
-GROUP_BY(25)(l_orderkey)
+GROUP_BY(27)(l_orderkey)
=> exprs: (avg(default.e.l_quantity (FLOAT8)))
=> target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
=> out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -130,113 +121,21 @@ GROUP_BY(25)(l_orderkey)
=> in schema: {(16) default.a.l_comment (TEXT), default.a.l_commitdate (TEXT), default.a.l_discount (FLOAT8), default.a.l_extendedprice (FLOAT8), default.a.l_linenumber (INT4), default.a.l_linestatus (TEXT), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_receiptdate (TEXT), default.a.l_returnflag (TEXT), default.a.l_shipdate (TEXT), default.a.l_shipinstruct (TEXT), default.a.l_shipmode (TEXT), default.a.l_suppkey (INT4), default.a.l_tax (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 10 (type=HASH_SHUFFLE, key=default.f.l_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(14) as default.f
- => Targets: default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)
- => out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- PROJECTION(13)
- => Targets: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
- => out schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- => in schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- GROUP_BY(12)(l_orderkey)
- => exprs: (avg(?avg_11 (PROTOBUF)))
- => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
- => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
- SCAN(26) on eb_0000000000000_0000_000003
- => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
- => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 9 (type=HASH_SHUFFLE, key=default.b.l_orderkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.d
- 1: type=Broadcast, tables=default.part
-
-TABLE_SUBQUERY(4) as default.b
- => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
- => in schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
- PROJECTION(10)
- => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- JOIN(20)(INNER)
- => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
- => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
- SCAN(8) on default.part
- => target list: default.part.p_partkey (INT4)
- => out schema: {(1) default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- SCAN(7) on default.lineitem as d
- => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000008 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-SCAN(5) on default.orders as c
- => filter: default.c.o_orderkey (INT4) > 0
- => target list: default.c.o_orderkey (INT4)
- => out schema: {(1) default.c.o_orderkey (INT4)}
- => in schema: {(9) default.c.o_clerk (TEXT), default.c.o_comment (TEXT), default.c.o_custkey (INT4), default.c.o_orderdate (TEXT), default.c.o_orderkey (INT4), default.c.o_orderpriority (TEXT), default.c.o_orderstatus (TEXT), default.c.o_shippriority (INT4), default.c.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000009 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 7 => 9 (type=HASH_SHUFFLE, key=default.b.l_orderkey (INT4), num=32)
-[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-JOIN(22)(INNER)
- => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
- => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- SCAN(28) on eb_0000000000000_0000_000008
- => out schema: {(1) default.c.o_orderkey (INT4)}
- => in schema: {(1) default.c.o_orderkey (INT4)}
- SCAN(27) on eb_0000000000000_0000_000007
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
- => in schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000010 [INTERMEDIATE]
=======================================================
[Incoming]
-[q_0000000000000_0000] 4 => 10 (type=HASH_SHUFFLE, key=default.f.l_orderkey (INT4), num=32)
-[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 3 => 10 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
[Outgoing]
[q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=, num=1)
-GROUP_BY(31)()
+[Enforcers]
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.c
+ 2: type=Broadcast, tables=default.d
+
+GROUP_BY(35)()
=> exprs: (sum(default.b.l_quantity (FLOAT8)))
=> target list: ?sum_12 (FLOAT8)
=> out schema:{(1) ?sum_12 (FLOAT8)}
@@ -248,12 +147,53 @@ GROUP_BY(31)()
=> target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
=> out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
=> in schema: {(4) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4), default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- SCAN(30) on eb_0000000000000_0000_000009
+ JOIN(22)(INNER)
+ => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
+ => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
=> out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- => in schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- SCAN(29) on eb_0000000000000_0000_000004
+ => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
+ SCAN(5) on default.orders as c
+ => filter: default.c.o_orderkey (INT4) > 0
+ => target list: default.c.o_orderkey (INT4)
+ => out schema: {(1) default.c.o_orderkey (INT4)}
+ => in schema: {(9) default.c.o_clerk (TEXT), default.c.o_comment (TEXT), default.c.o_custkey (INT4), default.c.o_orderdate (TEXT), default.c.o_orderkey (INT4), default.c.o_orderpriority (TEXT), default.c.o_orderstatus (TEXT), default.c.o_shippriority (INT4), default.c.o_totalprice (FLOAT8)}
+ TABLE_SUBQUERY(4) as default.b
+ => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
+ => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
+ => in schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
+ PROJECTION(10)
+ => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ JOIN(20)(INNER)
+ => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
+ SCAN(8) on default.part
+ => target list: default.part.p_partkey (INT4)
+ => out schema: {(1) default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ SCAN(7) on default.lineitem as d
+ => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
+ TABLE_SUBQUERY(14) as default.f
+ => Targets: default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)
=> out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
+ => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
+ PROJECTION(13)
+ => Targets: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
+ => out schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ => in schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ GROUP_BY(12)(l_orderkey)
+ => exprs: (avg(?avg_11 (PROTOBUF)))
+ => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
+ => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
+ SCAN(28) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
+ => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
=======================================================
Block Id: eb_0000000000000_0000_000011 [ROOT]
@@ -267,7 +207,7 @@ GROUP_BY(18)()
=> target list: ?sum (FLOAT8)
=> out schema:{(1) ?sum (FLOAT8)}
=> in schema:{(1) ?sum_12 (FLOAT8)}
- SCAN(32) on eb_0000000000000_0000_000010
+ SCAN(36) on eb_0000000000000_0000_000010
=> out schema: {(1) ?sum_12 (FLOAT8)}
=> in schema: {(1) ?sum_12 (FLOAT8)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Hash.plan
index 2325ed7..4e72e08 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Hash.plan
@@ -27,61 +27,24 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(3) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- PROJECTION(2)
- => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
- => out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+
SORT(12)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(8)(INNER)
@@ -89,12 +52,22 @@ SORT(12)
=> target list: default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
=> in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- SCAN(11) on eb_0000000000000_0000_000002
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
=> out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- SCAN(10) on eb_0000000000000_0000_000001
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ TABLE_SUBQUERY(3) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
=> out schema: {(1) name2 (TEXT)}
- => in schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ PROJECTION(2)
+ => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Sort.plan
index 2325ed7..4e72e08 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition5.Sort.plan
@@ -27,61 +27,24 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(3) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- PROJECTION(2)
- => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
- => out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+
SORT(12)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(8)(INNER)
@@ -89,12 +52,22 @@ SORT(12)
=> target list: default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
=> in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- SCAN(11) on eb_0000000000000_0000_000002
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
=> out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- SCAN(10) on eb_0000000000000_0000_000001
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ TABLE_SUBQUERY(3) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
=> out schema: {(1) name2 (TEXT)}
- => in schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ PROJECTION(2)
+ => Targets: default.nation.n_nationkey (INT4), default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.nation.n_comment (TEXT)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Hash.plan
index 15a4a6b..2402db7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Hash.plan
@@ -40,89 +40,53 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000004
-4: eb_0000000000000_0000_000003
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000005
+3: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(13) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(14) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
- => out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 5 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+ 1: type=Broadcast, tables=default.n1
+
SORT(18)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(11)(INNER)
=> Join Cond: name1 (TEXT) = name2 (TEXT)
=> target list: default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- => in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- SCAN(17) on eb_0000000000000_0000_000004
+ => in schema: {(3) default.n2.name2 (TEXT), default.n1.n_nationkey (INT4), name1 (TEXT)}
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
=> out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- SCAN(15) on eb_0000000000000_0000_000001
- => out schema: {(1) default.n2.name2 (TEXT)}
- => in schema: {(1) default.n2.name2 (TEXT)}
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ UNION(21)
+ TABLE_SUBQUERY(14) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
+ => out schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ TABLE_SUBQUERY(13) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
+ => out schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Sort.plan
index 15a4a6b..2402db7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition6.Sort.plan
@@ -40,89 +40,53 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000004
-4: eb_0000000000000_0000_000003
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000005
+3: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(13) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32)
-
-TABLE_SUBQUERY(14) as default.n2
- => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
- => out schema: {(1) name2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
- => out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=name2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=name1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 5 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+ 1: type=Broadcast, tables=default.n1
+
SORT(18)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
JOIN(11)(INNER)
=> Join Cond: name1 (TEXT) = name2 (TEXT)
=> target list: default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)
=> out schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- => in schema: {(3) default.n1.n_nationkey (INT4), name1 (TEXT), name2 (TEXT)}
- SCAN(17) on eb_0000000000000_0000_000004
+ => in schema: {(3) default.n2.name2 (TEXT), default.n1.n_nationkey (INT4), name1 (TEXT)}
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as name1
=> out schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- => in schema: {(2) default.n1.n_nationkey (INT4), name1 (TEXT)}
- SCAN(15) on eb_0000000000000_0000_000001
- => out schema: {(1) default.n2.name2 (TEXT)}
- => in schema: {(1) default.n2.name2 (TEXT)}
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ UNION(21)
+ TABLE_SUBQUERY(14) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
+ => out schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ TABLE_SUBQUERY(13) as default.n2
+ => Targets: substr(default.n2.n_name (TEXT),1,4) as name2
+ => out schema: {(1) name2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Hash.plan
index cd716a4..8e6d32b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Hash.plan
@@ -40,89 +40,53 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000004
-4: eb_0000000000000_0000_000003
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000005
+3: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32)
-
-TABLE_SUBQUERY(13) as default.n2
- => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
- => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32)
-
-TABLE_SUBQUERY(14) as default.n2
- => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
- => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=?substr_1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as ?substr_1
- => out schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=?substr_1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 5 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+ 1: type=Broadcast, tables=default.n1
+
SORT(18)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc),default.n2.n_name (TEXT) (asc)
JOIN(11)(INNER)
=> Join Cond: ?substr_1 (TEXT) = ?substr_2 (TEXT)
=> target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
- => in schema: {(5) ?substr_1 (TEXT), ?substr_2 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
- SCAN(17) on eb_0000000000000_0000_000004
+ => in schema: {(5) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT), ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as ?substr_1
=> out schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- => in schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000001
- => out schema: {(2) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT)}
- => in schema: {(2) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT)}
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ UNION(21)
+ TABLE_SUBQUERY(14) as default.n2
+ => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
+ => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ TABLE_SUBQUERY(13) as default.n2
+ => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
+ => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Sort.plan
index cd716a4..8e6d32b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testComplexJoinCondition7.Sort.plan
@@ -40,89 +40,53 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000004
-4: eb_0000000000000_0000_000003
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000005
+3: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32)
-
-TABLE_SUBQUERY(13) as default.n2
- => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
- => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(1) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32)
-
-TABLE_SUBQUERY(14) as default.n2
- => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
- => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
- => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=?substr_1 (TEXT), num=32)
-
-SCAN(0) on default.nation as n1
- => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as ?substr_1
- => out schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=?substr_2 (TEXT), num=32), union delegated scan: eb_0000000000000_0000_000001
-[q_0000000000000_0000] 4 => 3 (type=HASH_SHUFFLE, key=?substr_1 (TEXT), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 5 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.nation
+ 1: type=Broadcast, tables=default.n1
+
SORT(18)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc),default.n2.n_name (TEXT) (asc)
JOIN(11)(INNER)
=> Join Cond: ?substr_1 (TEXT) = ?substr_2 (TEXT)
=> target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)
=> out schema: {(3) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
- => in schema: {(5) ?substr_1 (TEXT), ?substr_2 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT)}
- SCAN(17) on eb_0000000000000_0000_000004
+ => in schema: {(5) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT), ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
+ SCAN(0) on default.nation as n1
+ => target list: default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), substr(default.n1.n_name (TEXT),1,4) as ?substr_1
=> out schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- => in schema: {(3) ?substr_1 (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000001
- => out schema: {(2) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT)}
- => in schema: {(2) default.n2.n_name (TEXT), default.n2.?substr_2 (TEXT)}
+ => in schema: {(4) default.n1.n_comment (TEXT), default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n1.n_regionkey (INT4)}
+ UNION(21)
+ TABLE_SUBQUERY(14) as default.n2
+ => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
+ => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ TABLE_SUBQUERY(13) as default.n2
+ => Targets: default.n2.n_name (TEXT), substr(default.n2.n_name (TEXT),1,4) as ?substr_2
+ => out schema: {(2) default.n2.n_name (TEXT), ?substr_2 (TEXT)}
+ => in schema: {(4) default.n2.n_comment (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4), default.n2.n_regionkey (INT4)}
+ SCAN(1) on default.nation
+ => target list: default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Hash.plan
index 9f790f3..f19b5cd 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Hash.plan
@@ -34,82 +34,52 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- JOIN(10)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4), name (TEXT)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) = MOROCCO
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT) as name, default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
-SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4)
- => out schema: {(1) default.s.s_nationkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.r
+ 1: type=Broadcast, tables=default.s
JOIN(11)(INNER)
=> Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
=> target list: default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)
=> out schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
=> in schema: {(5) default.s.s_nationkey (INT4), default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
- SCAN(14) on eb_0000000000000_0000_000004
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4)
=> out schema: {(1) default.s.s_nationkey (INT4)}
- => in schema: {(1) default.s.s_nationkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000003
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ JOIN(10)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4), name (TEXT)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) = MOROCCO
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT) as name, default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Sort.plan
index 9f790f3..f19b5cd 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual2.Sort.plan
@@ -34,82 +34,52 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- JOIN(10)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4), name (TEXT)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) = MOROCCO
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT) as name, default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
-SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4)
- => out schema: {(1) default.s.s_nationkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.r
+ 1: type=Broadcast, tables=default.s
JOIN(11)(INNER)
=> Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
=> target list: default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)
=> out schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
=> in schema: {(5) default.s.s_nationkey (INT4), default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
- SCAN(14) on eb_0000000000000_0000_000004
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4)
=> out schema: {(1) default.s.s_nationkey (INT4)}
- => in schema: {(1) default.s.s_nationkey (INT4)}
- SCAN(13) on eb_0000000000000_0000_000003
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4), default.t.name (TEXT)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ JOIN(10)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4), name (TEXT)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) = MOROCCO
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT) as name, default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), name (TEXT)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
index 88c814d..cfbb849 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
@@ -43,95 +43,62 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000008
|-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- JOIN(12)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
[Enforcers]
- 0: type=Broadcast, tables=default.s
+ 0: type=Broadcast, tables=default.r
1: type=Broadcast, tables=default.ps
-
-JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(7) on default.partsupp as ps
- => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [ROOT]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+ 2: type=Broadcast, tables=default.s
JOIN(14)(INNER)
=> Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
=> target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
=> out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
=> in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000006
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
=> out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ SCAN(7) on default.partsupp as ps
+ => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
+ => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000008 [TERMINAL]
[07/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
index 88c814d..cfbb849 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
@@ -43,95 +43,62 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000008
|-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- JOIN(12)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
[Enforcers]
- 0: type=Broadcast, tables=default.s
+ 0: type=Broadcast, tables=default.r
1: type=Broadcast, tables=default.ps
-
-JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(7) on default.partsupp as ps
- => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [ROOT]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+ 2: type=Broadcast, tables=default.s
JOIN(14)(INNER)
=> Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
=> target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
=> out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
=> in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000006
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
=> out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ SCAN(7) on default.partsupp as ps
+ => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
+ => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000008 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
index 15be610..a9b0876 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
@@ -45,83 +45,21 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000008
|-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- JOIN(12)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
[Enforcers]
- 0: type=Broadcast, tables=default.s
+ 0: type=Broadcast, tables=default.r
1: type=Broadcast, tables=default.ps
-
-JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(7) on default.partsupp as ps
- => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [ROOT]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+ 2: type=Broadcast, tables=default.s
SELECTION(9)
=> Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
@@ -130,12 +68,41 @@ SELECTION(9)
=> target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
=> out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
=> in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000006
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
=> out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ SCAN(7) on default.partsupp as ps
+ => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
+ => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000008 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
index 15be610..a9b0876 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
@@ -45,83 +45,21 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000008
|-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-TABLE_SUBQUERY(4) as default.t
- => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
- => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- PROJECTION(3)
- => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- JOIN(12)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
- => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
-
[Enforcers]
- 0: type=Broadcast, tables=default.s
+ 0: type=Broadcast, tables=default.r
1: type=Broadcast, tables=default.ps
-
-JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(7) on default.partsupp as ps
- => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(5) on default.supplier as s
- => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
- => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [ROOT]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
+ 2: type=Broadcast, tables=default.s
SELECTION(9)
=> Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
@@ -130,12 +68,41 @@ SELECTION(9)
=> target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
=> out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
=> in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000006
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
=> out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ SCAN(7) on default.partsupp as ps
+ => target list: default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(5) on default.supplier as s
+ => target list: default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
+ => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ TABLE_SUBQUERY(4) as default.t
+ => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
=> out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
- => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
+ => in schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => filter: default.n.n_name (TEXT) IN (ARGENTINA, ETHIOPIA, MOROCCO)
+ => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000008 [TERMINAL]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
new file mode 100644
index 0000000..c0b6f82
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
@@ -0,0 +1,142 @@
+explain
+-------------------------------
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
+4: eb_0000000000000_0000_000008
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 6 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.r
+
+GROUP_BY(16)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
+ => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 6 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.n
+
+SORT(20)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ PROJECTION(5)
+ => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count(?count_4 (INT8)))
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ SCAN(17) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000006
+
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ SCAN(21) on eb_0000000000000_0000_000006
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
new file mode 100644
index 0000000..6509afc
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
@@ -0,0 +1,196 @@
+explain
+-------------------------------
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+8: eb_0000000000000_0000_000008
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+GROUP_BY(16)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
+ => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(15) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(1) default.r.r_regionkey (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000001
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.t.r_regionkey (INT4), num=32)
+
+TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ PROJECTION(5)
+ => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count(?count_4 (INT8)))
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ SCAN(17) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.t.r_regionkey (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+SORT(20)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(19) on eb_0000000000000_0000_000005
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ SCAN(18) on eb_0000000000000_0000_000004
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000006
+
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ SCAN(21) on eb_0000000000000_0000_000006
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
new file mode 100644
index 0000000..c0b6f82
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
@@ -0,0 +1,142 @@
+explain
+-------------------------------
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
+4: eb_0000000000000_0000_000008
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 6 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.r
+
+GROUP_BY(16)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
+ => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 6 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.n
+
+SORT(20)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ PROJECTION(5)
+ => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count(?count_4 (INT8)))
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ SCAN(17) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000006
+
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ SCAN(21) on eb_0000000000000_0000_000006
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
new file mode 100644
index 0000000..6509afc
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
@@ -0,0 +1,196 @@
+explain
+-------------------------------
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+8: eb_0000000000000_0000_000008
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+SCAN(1) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+SCAN(2) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+GROUP_BY(16)(r_regionkey)
+ => exprs: (count())
+ => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
+ => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ JOIN(11)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(15) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(1) default.r.r_regionkey (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000001
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.t.r_regionkey (INT4), num=32)
+
+TABLE_SUBQUERY(6) as default.t
+ => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ PROJECTION(5)
+ => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ GROUP_BY(4)(r_regionkey)
+ => exprs: (count(?count_4 (INT8)))
+ => target list: default.r.r_regionkey (INT4), cnt (INT8)
+ => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+ => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ SCAN(17) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+ => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 4 => 6 (type=HASH_SHUFFLE, key=default.t.r_regionkey (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=HASH_SHUFFLE, key=default.n.n_regionkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+SORT(20)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ JOIN(12)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ SCAN(19) on eb_0000000000000_0000_000005
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ SCAN(18) on eb_0000000000000_0000_000004
+ => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+ => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000006
+
+SORT(8)
+ => Sort Keys: default.n.n_nationkey (INT4) (asc)
+ SCAN(21) on eb_0000000000000_0000_000006
+ => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
new file mode 100644
index 0000000..f3a26c8
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
@@ -0,0 +1,27 @@
+n_nationkey,n_name,n_regionkey,cnt
+-------------------------------
+0,ALGERIA,0,5
+1,ARGENTINA,1,5
+2,BRAZIL,1,5
+3,CANADA,1,5
+4,EGYPT,4,5
+5,ETHIOPIA,0,5
+6,FRANCE,3,5
+7,GERMANY,3,5
+8,INDIA,2,5
+9,INDONESIA,2,5
+10,IRAN,4,5
+11,IRAQ,4,5
+12,JAPAN,2,5
+13,JORDAN,4,5
+14,KENYA,0,5
+15,MOROCCO,0,5
+16,MOZAMBIQUE,0,5
+17,PERU,1,5
+18,CHINA,2,5
+19,ROMANIA,3,5
+20,SAUDI ARABIA,4,5
+21,VIETNAM,2,5
+22,RUSSIA,3,5
+23,UNITED KINGDOM,3,5
+24,UNITED STATES,1,5
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
index 668ddab..4ded90a 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
@@ -27,32 +27,31 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
- 2: type=Broadcast, tables=default.supplier
+ 1: type=Broadcast, tables=default.supplier
-SORT(11)
+SORT(15)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
JOIN(9)(LEFT_OUTER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
@@ -78,21 +77,21 @@ SORT(11)
=> in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(5)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
- SCAN(12) on eb_0000000000000_0000_000003
+ SCAN(16) on eb_0000000000000_0000_000005
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
index 668ddab..4ded90a 100644
--- a/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
@@ -27,32 +27,31 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
- 2: type=Broadcast, tables=default.supplier
+ 1: type=Broadcast, tables=default.supplier
-SORT(11)
+SORT(15)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
JOIN(9)(LEFT_OUTER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
@@ -78,21 +77,21 @@ SORT(11)
=> in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), s1 (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(5)
=> Sort Keys: default.region.r_name (TEXT) (asc),s1 (TEXT) (asc)
- SCAN(12) on eb_0000000000000_0000_000003
+ SCAN(16) on eb_0000000000000_0000_000005
=> out schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=> in schema: {(2) default.region.r_name (TEXT), s1 (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
[05/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan
new file mode 100644
index 0000000..fa727c0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan
@@ -0,0 +1,153 @@
+explain
+-------------------------------
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SORT(15)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000005
+
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ SCAN(16) on eb_0000000000000_0000_000005
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
new file mode 100644
index 0000000..fa727c0
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
@@ -0,0 +1,153 @@
+explain
+-------------------------------
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+7: eb_0000000000000_0000_000007
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(1) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(FULL_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(3) on default.jointable14 as t4
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SORT(15)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ JOIN(9)(FULL_OUTER)
+ => Join Cond: default.t3.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Enforcers]
+ 0: sorted input=eb_0000000000000_0000_000005
+
+SORT(5)
+ => Sort Keys: default.t4.id (INT4) (asc)
+ SCAN(16) on eb_0000000000000_0000_000005
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.result b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.result
new file mode 100644
index 0000000..8d9d294
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.result
@@ -0,0 +1,9 @@
+id,name,id,id
+-------------------------------
+null,null,null,1
+2,table11-2,2,2
+3,table11-3,3,3
+null,null,null,4
+1,table11-1,null,null
+4,table11-4,null,null
+5,table11-5,null,null
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
index 38ffa15..580a217 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
@@ -23,40 +23,66 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000001 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.empty_orders.o_orderkey (INT4), num=32)
-[Enforcers]
- 0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
+SCAN(0) on default.empty_orders
+ => target list: default.empty_orders.o_orderkey (INT4)
+ => out schema: {(1) default.empty_orders.o_orderkey (INT4)}
+ => in schema: {(9) default.empty_orders.o_clerk (TEXT), default.empty_orders.o_comment (TEXT), default.empty_orders.o_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderpriority (TEXT), default.empty_orders.o_orderstatus (TEXT), default.empty_orders.o_shippriority (INT4), default.empty_orders.o_totalprice (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+SCAN(1) on default.customer
+ => target list: default.customer.c_custkey (INT4)
+ => out schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
-SORT(8)
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.empty_orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4), num=32)
+
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(FULL_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
=> target list: default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
- SCAN(1) on default.customer
- => target list: default.customer.c_custkey (INT4)
+ SCAN(9) on eb_0000000000000_0000_000002
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(0) on default.empty_orders
- => target list: default.empty_orders.o_orderkey (INT4)
+ => in schema: {(1) default.customer.c_custkey (INT4)}
+ SCAN(8) on eb_0000000000000_0000_000001
=> out schema: {(1) default.empty_orders.o_orderkey (INT4)}
- => in schema: {(9) default.empty_orders.o_clerk (TEXT), default.empty_orders.o_comment (TEXT), default.empty_orders.o_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderpriority (TEXT), default.empty_orders.o_orderstatus (TEXT), default.empty_orders.o_shippriority (INT4), default.empty_orders.o_totalprice (FLOAT8)}
+ => in schema: {(1) default.empty_orders.o_orderkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
@@ -70,7 +96,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
index 38ffa15..580a217 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
@@ -23,40 +23,66 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000001 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.empty_orders.o_orderkey (INT4), num=32)
-[Enforcers]
- 0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
+SCAN(0) on default.empty_orders
+ => target list: default.empty_orders.o_orderkey (INT4)
+ => out schema: {(1) default.empty_orders.o_orderkey (INT4)}
+ => in schema: {(9) default.empty_orders.o_clerk (TEXT), default.empty_orders.o_comment (TEXT), default.empty_orders.o_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderpriority (TEXT), default.empty_orders.o_orderstatus (TEXT), default.empty_orders.o_shippriority (INT4), default.empty_orders.o_totalprice (FLOAT8)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+SCAN(1) on default.customer
+ => target list: default.customer.c_custkey (INT4)
+ => out schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
-SORT(8)
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.empty_orders.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4), num=32)
+
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(FULL_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
=> target list: default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
- SCAN(1) on default.customer
- => target list: default.customer.c_custkey (INT4)
+ SCAN(9) on eb_0000000000000_0000_000002
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
- SCAN(0) on default.empty_orders
- => target list: default.empty_orders.o_orderkey (INT4)
+ => in schema: {(1) default.customer.c_custkey (INT4)}
+ SCAN(8) on eb_0000000000000_0000_000001
=> out schema: {(1) default.empty_orders.o_orderkey (INT4)}
- => in schema: {(9) default.empty_orders.o_clerk (TEXT), default.empty_orders.o_comment (TEXT), default.empty_orders.o_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderpriority (TEXT), default.empty_orders.o_orderstatus (TEXT), default.empty_orders.o_shippriority (INT4), default.empty_orders.o_totalprice (FLOAT8)}
+ => in schema: {(1) default.empty_orders.o_orderkey (INT4)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
@@ -70,7 +96,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Hash.plan
index 21e7d4f..91199f6 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Hash.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.nation
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4) AND default.region.r_name (TEXT) IN (AMERICA, ASIA)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Sort.plan
index 21e7d4f..91199f6 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testJoinFilterOfRowPreservedTable1.Sort.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.nation
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4) AND default.region.r_name (TEXT) IN (AMERICA, ASIA)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_name (TEXT) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Hash.plan
index 539f3da..ae40796 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Hash.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderstatus (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderstatus (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Sort.plan
index 539f3da..ae40796 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin1.Sort.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderstatus (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderstatus (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Hash.plan
index 3ebc3e4..997d761 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Hash.plan
@@ -34,19 +34,19 @@ JOIN(11)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
@@ -87,5 +87,5 @@ JOIN(11)(LEFT_OUTER)
=> in schema: {(16) default.a.l_comment (TEXT), default.a.l_commitdate (TEXT), default.a.l_discount (FLOAT8), default.a.l_extendedprice (FLOAT8), default.a.l_linenumber (INT4), default.a.l_linestatus (TEXT), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_receiptdate (TEXT), default.a.l_returnflag (TEXT), default.a.l_shipdate (TEXT), default.a.l_shipinstruct (TEXT), default.a.l_shipmode (TEXT), default.a.l_suppkey (INT4), default.a.l_tax (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Sort.plan
index 3ebc3e4..997d761 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin2.Sort.plan
@@ -34,19 +34,19 @@ JOIN(11)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
@@ -87,5 +87,5 @@ JOIN(11)(LEFT_OUTER)
=> in schema: {(16) default.a.l_comment (TEXT), default.a.l_commitdate (TEXT), default.a.l_discount (FLOAT8), default.a.l_extendedprice (FLOAT8), default.a.l_linenumber (INT4), default.a.l_linestatus (TEXT), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_receiptdate (TEXT), default.a.l_returnflag (TEXT), default.a.l_shipdate (TEXT), default.a.l_shipinstruct (TEXT), default.a.l_shipmode (TEXT), default.a.l_suppkey (INT4), default.a.l_tax (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
index 1a8f3b5..2418b98 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
@@ -52,26 +52,26 @@ JOIN(17)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000012)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000012
+ |-eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000011
+2: eb_0000000000000_0000_000012
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000011 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.c
- 2: type=Broadcast, tables=default.d
- 3: type=Broadcast, tables=default.e
+ 0: type=Broadcast, tables=default.e
+ 1: type=Broadcast, tables=default.b
+ 2: type=Broadcast, tables=default.c
+ 3: type=Broadcast, tables=default.d
4: type=Broadcast, tables=default.f
JOIN(17)(LEFT_OUTER)
@@ -125,5 +125,5 @@ JOIN(17)(LEFT_OUTER)
=> in schema: {(8) default.a.c_acctbal (FLOAT8), default.a.c_address (TEXT), default.a.c_comment (TEXT), default.a.c_custkey (INT4), default.a.c_mktsegment (TEXT), default.a.c_name (TEXT), default.a.c_nationkey (INT4), default.a.c_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000012 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
index 1a8f3b5..2418b98 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
@@ -52,26 +52,26 @@ JOIN(17)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000012)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000012
+ |-eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000011
+2: eb_0000000000000_0000_000012
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000011 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.c
- 2: type=Broadcast, tables=default.d
- 3: type=Broadcast, tables=default.e
+ 0: type=Broadcast, tables=default.e
+ 1: type=Broadcast, tables=default.b
+ 2: type=Broadcast, tables=default.c
+ 3: type=Broadcast, tables=default.d
4: type=Broadcast, tables=default.f
JOIN(17)(LEFT_OUTER)
@@ -125,5 +125,5 @@ JOIN(17)(LEFT_OUTER)
=> in schema: {(8) default.a.c_acctbal (FLOAT8), default.a.c_address (TEXT), default.a.c_comment (TEXT), default.a.c_custkey (INT4), default.a.c_mktsegment (TEXT), default.a.c_name (TEXT), default.a.c_nationkey (INT4), default.a.c_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000012 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Hash.plan
index b6064cc..ea058ca 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Hash.plan
@@ -25,19 +25,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -68,5 +68,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Sort.plan
index b6064cc..ea058ca 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase1.1.Sort.plan
@@ -25,19 +25,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -68,5 +68,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
index 0a22bad..f5e0586 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
@@ -34,24 +34,24 @@ JOIN(11)(INNER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.t2
- 1: type=Broadcast, tables=default.t3
+ 0: type=Broadcast, tables=default.t3
+ 1: type=Broadcast, tables=default.t2
2: type=Broadcast, tables=default.t4
JOIN(11)(INNER)
@@ -87,5 +87,5 @@ JOIN(11)(INNER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
index 0a22bad..f5e0586 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
@@ -34,24 +34,24 @@ JOIN(11)(INNER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.t2
- 1: type=Broadcast, tables=default.t3
+ 0: type=Broadcast, tables=default.t3
+ 1: type=Broadcast, tables=default.t2
2: type=Broadcast, tables=default.t4
JOIN(11)(INNER)
@@ -87,5 +87,5 @@ JOIN(11)(INNER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Hash.plan
index ab1b487..a35e200 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Hash.plan
@@ -37,26 +37,25 @@ JOIN(12)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.t1
- 1: type=Broadcast, tables=default.t4
- 2: type=Broadcast, tables=default.t3
- 3: type=Broadcast, tables=default.t2
+ 0: type=Broadcast, tables=default.t4
+ 1: type=Broadcast, tables=default.t3
+ 2: type=Broadcast, tables=default.t2
JOIN(12)(LEFT_OUTER)
=> Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
@@ -94,5 +93,5 @@ JOIN(12)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Sort.plan
index ab1b487..a35e200 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2_1.1.Sort.plan
@@ -37,26 +37,25 @@ JOIN(12)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000008)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000007 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.t1
- 1: type=Broadcast, tables=default.t4
- 2: type=Broadcast, tables=default.t3
- 3: type=Broadcast, tables=default.t2
+ 0: type=Broadcast, tables=default.t4
+ 1: type=Broadcast, tables=default.t3
+ 2: type=Broadcast, tables=default.t2
JOIN(12)(LEFT_OUTER)
=> Join Cond: default.t1.id (INT4) = default.t2.id (INT4)
@@ -94,5 +93,5 @@ JOIN(12)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000008 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Hash.plan
index 50c41c9..79ce689 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Hash.plan
@@ -25,19 +25,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -68,5 +68,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Sort.plan
index 50c41c9..79ce689 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase3.1.Sort.plan
@@ -25,19 +25,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -68,5 +68,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Hash.plan
index 1e2809e..ad27e6f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Hash.plan
@@ -26,19 +26,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -70,5 +70,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Sort.plan
index 1e2809e..ad27e6f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase4.1.Sort.plan
@@ -26,19 +26,19 @@ JOIN(8)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -70,5 +70,5 @@ JOIN(8)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Hash.plan
index 88a955f..88cf366 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Hash.plan
@@ -26,19 +26,19 @@ JOIN(9)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -70,5 +70,5 @@ JOIN(9)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Sort.plan
index 88a955f..88cf366 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase5.1.Sort.plan
@@ -26,19 +26,19 @@ JOIN(9)(LEFT_OUTER)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -70,5 +70,5 @@ JOIN(9)(LEFT_OUTER)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Hash.plan
index d9e214c..b23896b 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Hash.plan
@@ -27,19 +27,19 @@ SELECTION(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -72,5 +72,5 @@ SELECTION(5)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Sort.plan
index d9e214c..b23896b 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase6.1.Sort.plan
@@ -27,19 +27,19 @@ SELECTION(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000004)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [ROOT]
+Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
[Enforcers]
@@ -72,5 +72,5 @@ SELECTION(5)
=> in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [TERMINAL]
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Hash.plan
index cc8a491..9ce925e 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Hash.plan
@@ -45,7 +45,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -77,7 +77,7 @@ PROJECTION(4)
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Sort.plan
index cc8a491..9ce925e 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithConstantExpr1.Sort.plan
@@ -45,7 +45,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.orders.o_orderkey (INT4)
@@ -77,7 +77,7 @@ PROJECTION(4)
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Hash.plan
index e35e6a5..8861bab 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Hash.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderstatus (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderstatus (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Sort.plan
index e35e6a5..8861bab 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable1.Sort.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(LEFT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderstatus (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), default.empty_orders.o_orderdate (TEXT), default.empty_orders.o_orderkey (INT4), default.empty_orders.o_orderstatus (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Hash.plan
index bca8356..1fa968f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Hash.plan
@@ -48,7 +48,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(9)(c_custkey)
+GROUP_BY(11)(c_custkey)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
@@ -77,14 +77,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-SORT(11)
+SORT(13)
=> Sort Keys: default.customer.c_custkey (INT4) (asc)
GROUP_BY(3)(c_custkey)
=> exprs: (sum(?sum_5 (INT8)),max(?max_6 (TEXT)),max(?max_7 (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum (INT8), ?max_1 (TEXT), ?max_2 (TEXT)
=> out schema:{(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
=> in schema:{(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
@@ -100,7 +100,7 @@ Block Id: eb_0000000000000_0000_000005 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc)
- SCAN(12) on eb_0000000000000_0000_000004
+ SCAN(14) on eb_0000000000000_0000_000004
=> out schema: {(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
=> in schema: {(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Sort.plan
index bca8356..1fa968f 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithEmptyTable2.Sort.plan
@@ -48,7 +48,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-GROUP_BY(9)(c_custkey)
+GROUP_BY(11)(c_custkey)
=> exprs: (sum(default.empty_orders.o_orderkey (INT4)),max(default.empty_orders.o_orderstatus (TEXT)),max(default.empty_orders.o_orderdate (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)
=> out schema:{(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
@@ -77,14 +77,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-SORT(11)
+SORT(13)
=> Sort Keys: default.customer.c_custkey (INT4) (asc)
GROUP_BY(3)(c_custkey)
=> exprs: (sum(?sum_5 (INT8)),max(?max_6 (TEXT)),max(?max_7 (TEXT)))
=> target list: default.customer.c_custkey (INT4), ?sum (INT8), ?max_1 (TEXT), ?max_2 (TEXT)
=> out schema:{(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
=> in schema:{(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
=> in schema: {(4) default.customer.c_custkey (INT4), ?sum_5 (INT8), ?max_6 (TEXT), ?max_7 (TEXT)}
@@ -100,7 +100,7 @@ Block Id: eb_0000000000000_0000_000005 [ROOT]
SORT(4)
=> Sort Keys: default.customer.c_custkey (INT4) (asc)
- SCAN(12) on eb_0000000000000_0000_000004
+ SCAN(14) on eb_0000000000000_0000_000004
=> out schema: {(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
=> in schema: {(4) ?max_1 (TEXT), ?max_2 (TEXT), ?sum (INT8), default.customer.c_custkey (INT4)}
[10/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
index 3a80bb4..f3b0e9d 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=joins.supplier_.s_suppkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=joins.supplier_
- 1: type=Broadcast, tables=default.nation
- 2: type=Broadcast, tables=default.region
+ 1: type=Broadcast, tables=default.region
+ 2: type=Broadcast, tables=joins.part_
+ 3: type=Broadcast, tables=default.partsupp
-JOIN(14)(INNER)
- => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
- => target list: default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(9) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(4) on default.region
- => target list: default.region.r_regionkey (INT4)
- => out schema: {(1) default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- JOIN(13)(INNER)
- => Join Cond: joins.supplier_.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(8) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- SCAN(1) on joins.supplier_
- => target list: joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=joins.part_
- 1: type=Broadcast, tables=default.partsupp
-
-JOIN(15)(INNER)
- => Join Cond: joins.part_.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
- => target list: default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
- => out schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(4) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- SCAN(2) on default.partsupp
- => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
- => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
- => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
- SCAN(0) on joins.part_
- => target list: joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
- => out schema: {(2) joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(9) joins.part_.p_brand (TEXT), joins.part_.p_comment (TEXT), joins.part_.p_container (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_name (TEXT), joins.part_.p_partkey (INT4), joins.part_.p_retailprice (FLOAT8), joins.part_.p_size (INT4), joins.part_.p_type (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=joins.supplier_.s_suppkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: joins.supplier_.s_acctbal (FLOAT8) (asc),joins.supplier_.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),joins.part_.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: joins.supplier_.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
=> target list: default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)
=> out schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=> in schema: {(10) default.nation.n_name (TEXT), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: joins.part_.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
=> out schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
+ SCAN(2) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
+ => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(0) on joins.part_
+ => target list: joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
+ => out schema: {(2) joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
+ => in schema: {(9) joins.part_.p_brand (TEXT), joins.part_.p_comment (TEXT), joins.part_.p_container (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_name (TEXT), joins.part_.p_partkey (INT4), joins.part_.p_retailprice (FLOAT8), joins.part_.p_size (INT4), joins.part_.p_type (TEXT)}
+ JOIN(14)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
=> out schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(9) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ SCAN(4) on default.region
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ JOIN(13)(INNER)
+ => Join Cond: joins.supplier_.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
+ => out schema: {(8) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(1) on joins.supplier_
+ => target list: joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
+ => out schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: joins.supplier_.s_acctbal (FLOAT8) (asc),joins.supplier_.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),joins.part_.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=> in schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
index a661de6..ead39f7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
@@ -45,124 +45,91 @@ SORT(10)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.s
- 1: type=Broadcast, tables=default.ps
- 2: type=Broadcast, tables=default.p
+ 0: type=Broadcast, tables=default.ps
+ 1: type=Broadcast, tables=default.p
+ 2: type=Broadcast, tables=default.s
+ 3: type=Broadcast, tables=default.r
-JOIN(14)(INNER)
- => Join Cond: default.p.p_partkey (INT4) = default.ps.ps_partkey (INT4)
- => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
- => out schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(10) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- SCAN(7) on default.part as p
- => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)
- => out schema: {(2) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)}
- => in schema: {(9) default.p.p_brand (TEXT), default.p.p_comment (TEXT), default.p.p_container (TEXT), default.p.p_mfgr (TEXT), default.p.p_name (TEXT), default.p.p_partkey (INT4), default.p.p_retailprice (FLOAT8), default.p.p_size (INT4), default.p.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
- => out schema: {(8) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(9) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
- SCAN(5) on default.partsupp as ps
- => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(3) on default.supplier as s
- => target list: default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)
- => out schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-JOIN(15)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.s.s_acctbal (FLOAT8) (asc),default.s.s_name (TEXT) (asc),default.n.n_name (TEXT) (asc),default.p.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: default.n.n_regionkey (INT4) = default.ps.ps_suppkey (INT4) AND default.s.s_nationkey (INT4) = default.n.n_nationkey (INT4)
=> target list: default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)
=> out schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=> in schema: {(12) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
=> out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.p.p_partkey (INT4) = default.ps.ps_partkey (INT4)
+ => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
=> out schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ => in schema: {(10) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ SCAN(7) on default.part as p
+ => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)
+ => out schema: {(2) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)}
+ => in schema: {(9) default.p.p_brand (TEXT), default.p.p_comment (TEXT), default.p.p_container (TEXT), default.p.p_mfgr (TEXT), default.p.p_name (TEXT), default.p.p_partkey (INT4), default.p.p_retailprice (FLOAT8), default.p.p_size (INT4), default.p.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
+ => out schema: {(8) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ => in schema: {(9) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ SCAN(5) on default.partsupp as ps
+ => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(3) on default.supplier as s
+ => target list: default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)
+ => out schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(10)
=> Sort Keys: default.s.s_acctbal (FLOAT8) (asc),default.s.s_name (TEXT) (asc),default.n.n_name (TEXT) (asc),default.p.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=> in schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
index a661de6..ead39f7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
@@ -45,124 +45,91 @@ SORT(10)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.s
- 1: type=Broadcast, tables=default.ps
- 2: type=Broadcast, tables=default.p
+ 0: type=Broadcast, tables=default.ps
+ 1: type=Broadcast, tables=default.p
+ 2: type=Broadcast, tables=default.s
+ 3: type=Broadcast, tables=default.r
-JOIN(14)(INNER)
- => Join Cond: default.p.p_partkey (INT4) = default.ps.ps_partkey (INT4)
- => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
- => out schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(10) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- SCAN(7) on default.part as p
- => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)
- => out schema: {(2) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)}
- => in schema: {(9) default.p.p_brand (TEXT), default.p.p_comment (TEXT), default.p.p_container (TEXT), default.p.p_mfgr (TEXT), default.p.p_name (TEXT), default.p.p_partkey (INT4), default.p.p_retailprice (FLOAT8), default.p.p_size (INT4), default.p.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
- => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
- => out schema: {(8) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(9) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
- SCAN(5) on default.partsupp as ps
- => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)
- => out schema: {(2) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)}
- => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
- SCAN(3) on default.supplier as s
- => target list: default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)
- => out schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
- => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.n
- 1: type=Broadcast, tables=default.r
-
-JOIN(15)(INNER)
- => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
- => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
- SCAN(1) on default.region as r
- => target list: default.r.r_regionkey (INT4)
- => out schema: {(1) default.r.r_regionkey (INT4)}
- => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
- SCAN(0) on default.nation as n
- => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
- => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.s.s_acctbal (FLOAT8) (asc),default.s.s_name (TEXT) (asc),default.n.n_name (TEXT) (asc),default.p.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: default.n.n_regionkey (INT4) = default.ps.ps_suppkey (INT4) AND default.s.s_nationkey (INT4) = default.n.n_nationkey (INT4)
=> target list: default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)
=> out schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=> in schema: {(12) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
=> out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+ SCAN(1) on default.region as r
+ => target list: default.r.r_regionkey (INT4)
+ => out schema: {(1) default.r.r_regionkey (INT4)}
+ => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+ SCAN(0) on default.nation as n
+ => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+ => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.p.p_partkey (INT4) = default.ps.ps_partkey (INT4)
+ => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
=> out schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
- => in schema: {(9) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ => in schema: {(10) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ SCAN(7) on default.part as p
+ => target list: default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)
+ => out schema: {(2) default.p.p_mfgr (TEXT), default.p.p_partkey (INT4)}
+ => in schema: {(9) default.p.p_brand (TEXT), default.p.p_comment (TEXT), default.p.p_container (TEXT), default.p.p_mfgr (TEXT), default.p.p_name (TEXT), default.p.p_partkey (INT4), default.p.p_retailprice (FLOAT8), default.p.p_size (INT4), default.p.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
+ => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)
+ => out schema: {(8) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT)}
+ => in schema: {(9) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ SCAN(5) on default.partsupp as ps
+ => target list: default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)
+ => out schema: {(2) default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4)}
+ => in schema: {(5) default.ps.ps_availqty (INT4), default.ps.ps_comment (TEXT), default.ps.ps_partkey (INT4), default.ps.ps_suppkey (INT4), default.ps.ps_supplycost (FLOAT8)}
+ SCAN(3) on default.supplier as s
+ => target list: default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)
+ => out schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
+ => in schema: {(7) default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_nationkey (INT4), default.s.s_phone (TEXT), default.s.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.n.n_name (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(10)
=> Sort Keys: default.s.s_acctbal (FLOAT8) (asc),default.s.s_name (TEXT) (asc),default.n.n_name (TEXT) (asc),default.p.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=> in schema: {(8) default.n.n_name (TEXT), default.p.p_mfgr (TEXT), default.p.p_partkey (INT4), default.s.s_acctbal (FLOAT8), default.s.s_address (TEXT), default.s.s_comment (TEXT), default.s.s_name (TEXT), default.s.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Hash.plan
index b08ab10..c86757c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Hash.plan
@@ -45,10 +45,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.n2
- 1: type=Broadcast, tables=default.n1
+ 0: type=Broadcast, tables=default.n1
-SORT(9)
+SORT(11)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
SELECTION(2)
=> Search Cond: default.n1.n_nationkey (INT4) IN (1, 2) OR default.n2.n_nationkey (INT4) IN (2)
@@ -82,7 +81,7 @@ PROJECTION(4)
=> in schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
=> in schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Sort.plan
index b08ab10..c86757c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithOrPredicates.Sort.plan
@@ -45,10 +45,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n1.n_nationkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.n2
- 1: type=Broadcast, tables=default.n1
+ 0: type=Broadcast, tables=default.n1
-SORT(9)
+SORT(11)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
SELECTION(2)
=> Search Cond: default.n1.n_nationkey (INT4) IN (1, 2) OR default.n2.n_nationkey (INT4) IN (2)
@@ -82,7 +81,7 @@ PROJECTION(4)
=> in schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
SORT(3)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
=> in schema: {(4) default.n1.n_name (TEXT), default.n1.n_nationkey (INT4), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Hash.plan
index bf9323d..1ef6092 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Hash.plan
@@ -39,10 +39,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n2.n_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.n2
- 1: type=Broadcast, tables=default.n1
+ 0: type=Broadcast, tables=default.n1
-SORT(8)
+SORT(10)
=> Sort Keys: default.n2.n_name (TEXT) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_comment (TEXT) = default.n2.n_comment (TEXT) AND default.n1.n_name (TEXT) = default.n2.n_name (TEXT) AND default.n1.n_nationkey (INT4) = default.n2.n_nationkey (INT4) AND default.n1.n_regionkey (INT4) = default.n2.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n2.n_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.n1.n_name (TEXT), default.n2.n_name (TEXT)}
=> in schema: {(2) default.n1.n_name (TEXT), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Sort.plan
index bf9323d..1ef6092 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testNaturalJoin.Sort.plan
@@ -39,10 +39,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.n2.n_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.n2
- 1: type=Broadcast, tables=default.n1
+ 0: type=Broadcast, tables=default.n1
-SORT(8)
+SORT(10)
=> Sort Keys: default.n2.n_name (TEXT) (asc)
JOIN(6)(INNER)
=> Join Cond: default.n1.n_comment (TEXT) = default.n2.n_comment (TEXT) AND default.n1.n_name (TEXT) = default.n2.n_name (TEXT) AND default.n1.n_nationkey (INT4) = default.n2.n_nationkey (INT4) AND default.n1.n_regionkey (INT4) = default.n2.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.n2.n_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.n1.n_name (TEXT), default.n2.n_name (TEXT)}
=> in schema: {(2) default.n1.n_name (TEXT), default.n2.n_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
index 38d9b38..b19c33f 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.supplier
+ 2: type=Broadcast, tables=default.partsupp
+ 3: type=Broadcast, tables=default.region
-JOIN(14)(INNER)
- => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
- => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
- => out schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(9) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- SCAN(0) on default.part
- => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
- => target list: default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
- => out schema: {(7) default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(9) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(2) on default.partsupp
- => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
- => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
- => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
- SCAN(1) on default.supplier
- => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
-
-JOIN(15)(INNER)
- => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
- => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
- SCAN(4) on default.region
- => target list: default.region.r_regionkey (INT4)
- => out schema: {(1) default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
=> target list: default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)
=> out schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=> in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
=> out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
+ SCAN(4) on default.region
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
=> out schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(9) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ SCAN(0) on default.part
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)
+ => out schema: {(2) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
+ => target list: default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(7) default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(9) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(2) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
+ => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(1) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=> in schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
[09/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
index 38d9b38..b19c33f 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.supplier
+ 2: type=Broadcast, tables=default.partsupp
+ 3: type=Broadcast, tables=default.region
-JOIN(14)(INNER)
- => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
- => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
- => out schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(9) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- SCAN(0) on default.part
- => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- JOIN(13)(INNER)
- => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
- => target list: default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
- => out schema: {(7) default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(9) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- SCAN(2) on default.partsupp
- => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
- => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
- => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
- SCAN(1) on default.supplier
- => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
- => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
- => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
-
-JOIN(15)(INNER)
- => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
- => out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
- SCAN(4) on default.region
- => target list: default.region.r_regionkey (INT4)
- => out schema: {(1) default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.supplier.s_nationkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.nation.n_nationkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
=> target list: default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)
=> out schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=> in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)
=> out schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- => in schema: {(2) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
+ SCAN(4) on default.region
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ JOIN(14)(INNER)
+ => Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
=> out schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
- => in schema: {(8) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(9) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ SCAN(0) on default.part
+ => target list: default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)
+ => out schema: {(2) default.part.p_mfgr (TEXT), default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(13)(INNER)
+ => Join Cond: default.supplier.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
+ => target list: default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)
+ => out schema: {(7) default.partsupp.ps_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT)}
+ => in schema: {(9) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ SCAN(2) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
+ => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(1) on default.supplier
+ => target list: default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)
+ => out schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
+ => in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=> in schema: {(8) default.nation.n_name (TEXT), default.part.p_mfgr (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
index 7ba5577..6da36f7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
index 7ba5577..6da36f7 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
index 1269493..549fe31 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.nation.n_name (TEXT), default.region.r_name (TEXT)}
=> in schema: {(2) default.nation.n_name (TEXT), default.region.r_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
index 1269493..549fe31 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.nation.n_name (TEXT), default.region.r_name (TEXT)}
=> in schema: {(2) default.nation.n_name (TEXT), default.region.r_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
index 3f1e25d..458abea 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.region.r_name (TEXT), p1 (INT4), p2 (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.region.r_name (TEXT), p1 (INT4), p2 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
index 3f1e25d..458abea 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(4) default.nation.n_name (TEXT), default.region.r_name (TEXT), p1 (INT4), p2 (INT4)}
=> in schema: {(4) default.nation.n_name (TEXT), default.region.r_name (TEXT), p1 (INT4), p2 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Hash.plan
index 03a12cf..9ca4d41 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Hash.plan
@@ -39,10 +39,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) ?plus (INT4), default.nation.n_name (TEXT), default.region.r_name (TEXT)}
=> in schema: {(3) ?plus (INT4), default.nation.n_name (TEXT), default.region.r_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Sort.plan
index 03a12cf..9ca4d41 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin4.Sort.plan
@@ -39,10 +39,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(9)
+SORT(11)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
JOIN(7)(INNER)
=> Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.nation.n_name (TEXT) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) ?plus (INT4), default.nation.n_name (TEXT), default.region.r_name (TEXT)}
=> in schema: {(3) ?plus (INT4), default.nation.n_name (TEXT), default.region.r_name (TEXT)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
index bdb7466..93829fc 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
@@ -27,32 +27,31 @@ SORT(4)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.part
-SORT(12)
+SORT(16)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
JOIN(10)(INNER)
=> Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
@@ -78,21 +77,21 @@ SORT(12)
=> in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(4)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
- SCAN(13) on eb_0000000000000_0000_000003
+ SCAN(17) on eb_0000000000000_0000_000005
=> out schema: {(3) default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=> in schema: {(3) default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
index bdb7466..93829fc 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
@@ -27,32 +27,31 @@ SORT(4)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000007
+ |-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.part
-SORT(12)
+SORT(16)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
JOIN(10)(INNER)
=> Join Cond: default.part.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
@@ -78,21 +77,21 @@ SORT(12)
=> in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000006 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000005
SORT(4)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc)
- SCAN(13) on eb_0000000000000_0000_000003
+ SCAN(17) on eb_0000000000000_0000_000005
=> out schema: {(3) default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=> in schema: {(3) default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000007 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
index 79e3827..73d8693 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
@@ -36,33 +36,32 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000009
+ |-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
+3: eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
- 3: type=Broadcast, tables=default.nation
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.supplier
+ 2: type=Broadcast, tables=default.partsupp
-SORT(15)
+SORT(21)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc),default.nation.n_name (TEXT) (asc)
JOIN(13)(INNER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
@@ -97,21 +96,21 @@ SORT(15)
=> in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000008 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000007
SORT(5)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(16) on eb_0000000000000_0000_000003
+ SCAN(22) on eb_0000000000000_0000_000007
=> out schema: {(4) default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=> in schema: {(4) default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000009 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
index 79e3827..73d8693 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
@@ -36,33 +36,32 @@ SORT(5)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000009
+ |-eb_0000000000000_0000_000008
+ |-eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000007
+2: eb_0000000000000_0000_000008
+3: eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000007 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.supplier
- 1: type=Broadcast, tables=default.partsupp
- 2: type=Broadcast, tables=default.part
- 3: type=Broadcast, tables=default.nation
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.supplier
+ 2: type=Broadcast, tables=default.partsupp
-SORT(15)
+SORT(21)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc),default.nation.n_name (TEXT) (asc)
JOIN(13)(INNER)
=> Join Cond: default.supplier.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
@@ -97,21 +96,21 @@ SORT(15)
=> in schema: {(7) default.supplier.s_acctbal (FLOAT8), default.supplier.s_address (TEXT), default.supplier.s_comment (TEXT), default.supplier.s_name (TEXT), default.supplier.s_nationkey (INT4), default.supplier.s_phone (TEXT), default.supplier.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [ROOT]
+Block Id: eb_0000000000000_0000_000008 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
+[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000003
+ 0: sorted input=eb_0000000000000_0000_000007
SORT(5)
=> Sort Keys: default.supplier.s_acctbal (FLOAT8) (asc),default.supplier.s_name (TEXT) (asc),default.part.p_partkey (INT4) (asc),default.nation.n_name (TEXT) (asc)
- SCAN(16) on eb_0000000000000_0000_000003
+ SCAN(22) on eb_0000000000000_0000_000007
=> out schema: {(4) default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=> in schema: {(4) default.nation.n_name (TEXT), default.part.p_partkey (INT4), default.supplier.s_acctbal (FLOAT8), default.supplier.s_name (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000005 [TERMINAL]
+Block Id: eb_0000000000000_0000_000009 [TERMINAL]
=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
index 0c134d5..2b7db47 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
@@ -36,100 +36,25 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
-7: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.o_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(4) as default.a
- => Targets: default.a.o_custkey (INT4), default.a.o_orderkey (INT4)
- => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- PROJECTION(3)
- => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(2) on default.orders
- => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
-
-SCAN(0) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.o_orderkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
-
-JOIN(11)(INNER)
- => Join Cond: default.lineitem.l_orderkey (INT4) = default.a.o_orderkey (INT4)
- => target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(4) default.a.o_custkey (INT4), default.a.o_orderkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000002
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- SCAN(14) on eb_0000000000000_0000_000001
- => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
-
-SCAN(1) on default.part
- => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.orders
+ 1: type=Broadcast, tables=default.part
+
SORT(18)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.a.o_custkey (INT4) (asc),default.part.p_name (TEXT) (asc)
JOIN(12)(INNER)
@@ -137,12 +62,31 @@ SORT(18)
=> target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT)
=> out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT)}
=> in schema: {(5) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000004
+ SCAN(1) on default.part
+ => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
=> out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(11)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.a.o_orderkey (INT4)
+ => target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
=> out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(4) default.a.o_custkey (INT4), default.a.o_orderkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ TABLE_SUBQUERY(4) as default.a
+ => Targets: default.a.o_custkey (INT4), default.a.o_orderkey (INT4)
+ => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
+ => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(2) on default.orders
+ => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
index 0c134d5..2b7db47 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
@@ -36,100 +36,25 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
-6: eb_0000000000000_0000_000006
-7: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.o_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(4) as default.a
- => Targets: default.a.o_custkey (INT4), default.a.o_orderkey (INT4)
- => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- PROJECTION(3)
- => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- SCAN(2) on default.orders
- => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
- => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
-
-SCAN(0) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.o_orderkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.lineitem.l_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
-
-JOIN(11)(INNER)
- => Join Cond: default.lineitem.l_orderkey (INT4) = default.a.o_orderkey (INT4)
- => target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
- => out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(4) default.a.o_custkey (INT4), default.a.o_orderkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- SCAN(15) on eb_0000000000000_0000_000002
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- SCAN(14) on eb_0000000000000_0000_000001
- => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
- => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
-
-SCAN(1) on default.part
- => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
- => out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.lineitem.l_partkey (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.part.p_partkey (INT4), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.orders
+ 1: type=Broadcast, tables=default.part
+
SORT(18)
=> Sort Keys: default.lineitem.l_orderkey (INT4) (asc),default.a.o_custkey (INT4) (asc),default.part.p_name (TEXT) (asc)
JOIN(12)(INNER)
@@ -137,12 +62,31 @@ SORT(18)
=> target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT)
=> out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.part.p_name (TEXT)}
=> in schema: {(5) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(17) on eb_0000000000000_0000_000004
+ SCAN(1) on default.part
+ => target list: default.part.p_name (TEXT), default.part.p_partkey (INT4)
=> out schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- => in schema: {(2) default.part.p_name (TEXT), default.part.p_partkey (INT4)}
- SCAN(16) on eb_0000000000000_0000_000003
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ JOIN(11)(INNER)
+ => Join Cond: default.lineitem.l_orderkey (INT4) = default.a.o_orderkey (INT4)
+ => target list: default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
=> out schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
- => in schema: {(3) default.a.o_custkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(4) default.a.o_custkey (INT4), default.a.o_orderkey (INT4), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ SCAN(0) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ TABLE_SUBQUERY(4) as default.a
+ => Targets: default.a.o_custkey (INT4), default.a.o_orderkey (INT4)
+ => out schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
+ => in schema: {(2) default.a.o_custkey (INT4), default.a.o_orderkey (INT4)}
+ PROJECTION(3)
+ => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ SCAN(2) on default.orders
+ => target list: default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)
+ => out schema: {(2) default.orders.o_custkey (INT4), default.orders.o_orderkey (INT4)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
index 7cde4c5..839afaf 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
@@ -73,22 +73,14 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000012)
|-eb_0000000000000_0000_000012
|-eb_0000000000000_0000_000011
|-eb_0000000000000_0000_000010
- |-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000007
-3: eb_0000000000000_0000_000008
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000009
-6: eb_0000000000000_0000_000010
-7: eb_0000000000000_0000_000011
-8: eb_0000000000000_0000_000012
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
+4: eb_0000000000000_0000_000012
-------------------------------------------------------------------------------
=======================================================
@@ -96,13 +88,12 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
+[q_0000000000000_0000] 3 => 10 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.part
+ 0: type=Broadcast, tables=default.part
-GROUP_BY(25)(l_orderkey)
+GROUP_BY(27)(l_orderkey)
=> exprs: (avg(default.e.l_quantity (FLOAT8)))
=> target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
=> out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -130,113 +121,21 @@ GROUP_BY(25)(l_orderkey)
=> in schema: {(16) default.a.l_comment (TEXT), default.a.l_commitdate (TEXT), default.a.l_discount (FLOAT8), default.a.l_extendedprice (FLOAT8), default.a.l_linenumber (INT4), default.a.l_linestatus (TEXT), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_receiptdate (TEXT), default.a.l_returnflag (TEXT), default.a.l_shipdate (TEXT), default.a.l_shipinstruct (TEXT), default.a.l_shipmode (TEXT), default.a.l_suppkey (INT4), default.a.l_tax (FLOAT8)}
=======================================================
-Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 10 (type=HASH_SHUFFLE, key=default.f.l_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(14) as default.f
- => Targets: default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)
- => out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- PROJECTION(13)
- => Targets: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
- => out schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- => in schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- GROUP_BY(12)(l_orderkey)
- => exprs: (avg(?avg_11 (PROTOBUF)))
- => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
- => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
- => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
- SCAN(26) on eb_0000000000000_0000_000003
- => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
- => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 9 (type=HASH_SHUFFLE, key=default.b.l_orderkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.d
- 1: type=Broadcast, tables=default.part
-
-TABLE_SUBQUERY(4) as default.b
- => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
- => in schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
- PROJECTION(10)
- => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- JOIN(20)(INNER)
- => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
- => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
- SCAN(8) on default.part
- => target list: default.part.p_partkey (INT4)
- => out schema: {(1) default.part.p_partkey (INT4)}
- => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
- SCAN(7) on default.lineitem as d
- => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
- => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
- => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000008 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-SCAN(5) on default.orders as c
- => filter: default.c.o_orderkey (INT4) > 0
- => target list: default.c.o_orderkey (INT4)
- => out schema: {(1) default.c.o_orderkey (INT4)}
- => in schema: {(9) default.c.o_clerk (TEXT), default.c.o_comment (TEXT), default.c.o_custkey (INT4), default.c.o_orderdate (TEXT), default.c.o_orderkey (INT4), default.c.o_orderpriority (TEXT), default.c.o_orderstatus (TEXT), default.c.o_shippriority (INT4), default.c.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000009 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 7 => 9 (type=HASH_SHUFFLE, key=default.b.l_orderkey (INT4), num=32)
-[q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
-
-JOIN(22)(INNER)
- => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
- => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- SCAN(28) on eb_0000000000000_0000_000008
- => out schema: {(1) default.c.o_orderkey (INT4)}
- => in schema: {(1) default.c.o_orderkey (INT4)}
- SCAN(27) on eb_0000000000000_0000_000007
- => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
- => in schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000010 [INTERMEDIATE]
=======================================================
[Incoming]
-[q_0000000000000_0000] 4 => 10 (type=HASH_SHUFFLE, key=default.f.l_orderkey (INT4), num=32)
-[q_0000000000000_0000] 9 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
+[q_0000000000000_0000] 3 => 10 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
[Outgoing]
[q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=, num=1)
-GROUP_BY(31)()
+[Enforcers]
+ 0: type=Broadcast, tables=default.part
+ 1: type=Broadcast, tables=default.c
+ 2: type=Broadcast, tables=default.d
+
+GROUP_BY(35)()
=> exprs: (sum(default.b.l_quantity (FLOAT8)))
=> target list: ?sum_12 (FLOAT8)
=> out schema:{(1) ?sum_12 (FLOAT8)}
@@ -248,12 +147,53 @@ GROUP_BY(31)()
=> target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
=> out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
=> in schema: {(4) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4), default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- SCAN(30) on eb_0000000000000_0000_000009
+ JOIN(22)(INNER)
+ => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
+ => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
=> out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- => in schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
- SCAN(29) on eb_0000000000000_0000_000004
+ => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
+ SCAN(5) on default.orders as c
+ => filter: default.c.o_orderkey (INT4) > 0
+ => target list: default.c.o_orderkey (INT4)
+ => out schema: {(1) default.c.o_orderkey (INT4)}
+ => in schema: {(9) default.c.o_clerk (TEXT), default.c.o_comment (TEXT), default.c.o_custkey (INT4), default.c.o_orderdate (TEXT), default.c.o_orderkey (INT4), default.c.o_orderpriority (TEXT), default.c.o_orderstatus (TEXT), default.c.o_shippriority (INT4), default.c.o_totalprice (FLOAT8)}
+ TABLE_SUBQUERY(4) as default.b
+ => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
+ => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
+ => in schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
+ PROJECTION(10)
+ => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ JOIN(20)(INNER)
+ => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
+ => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
+ SCAN(8) on default.part
+ => target list: default.part.p_partkey (INT4)
+ => out schema: {(1) default.part.p_partkey (INT4)}
+ => in schema: {(9) default.part.p_brand (TEXT), default.part.p_comment (TEXT), default.part.p_container (TEXT), default.part.p_mfgr (TEXT), default.part.p_name (TEXT), default.part.p_partkey (INT4), default.part.p_retailprice (FLOAT8), default.part.p_size (INT4), default.part.p_type (TEXT)}
+ SCAN(7) on default.lineitem as d
+ => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
+ => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
+ => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
+ TABLE_SUBQUERY(14) as default.f
+ => Targets: default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)
=> out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
- => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
+ => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
+ PROJECTION(13)
+ => Targets: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
+ => out schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ => in schema: {(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ GROUP_BY(12)(l_orderkey)
+ => exprs: (avg(?avg_11 (PROTOBUF)))
+ => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
+ => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
+ => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
+ SCAN(28) on eb_0000000000000_0000_000003
+ => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
+ => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
=======================================================
Block Id: eb_0000000000000_0000_000011 [ROOT]
@@ -267,7 +207,7 @@ GROUP_BY(18)()
=> target list: ?sum (FLOAT8)
=> out schema:{(1) ?sum (FLOAT8)}
=> in schema:{(1) ?sum_12 (FLOAT8)}
- SCAN(32) on eb_0000000000000_0000_000010
+ SCAN(36) on eb_0000000000000_0000_000010
=> out schema: {(1) ?sum_12 (FLOAT8)}
=> in schema: {(1) ?sum_12 (FLOAT8)}
[11/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Hash.plan
index 1bf0332..724e240 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Hash.plan
@@ -31,8 +31,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Sort.plan
index 1bf0332..724e240 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.Sort.plan
@@ -31,8 +31,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Hash.plan
index 1bf0332..724e240 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Hash.plan
@@ -31,8 +31,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Sort.plan
index 1bf0332..724e240 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.4.Sort.plan
@@ -31,8 +31,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
JOIN(5)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Hash.plan
index 5b81a05..35e397b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Hash.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc)
JOIN(6)(CROSS)
=> target list: ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
=> in schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Sort.plan
index 5b81a05..35e397b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.Sort.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc)
JOIN(6)(CROSS)
=> target list: ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
=> in schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
index c083fa1..af6c200 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
=> in schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
index c083fa1..af6c200 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
=> in schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
index 98f058c..b76c6e2 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
@@ -39,9 +39,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.customer
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
index 98f058c..b76c6e2 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
@@ -39,9 +39,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.customer
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Hash.plan
index 455b6d2..b4d8565 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Hash.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Sort.plan
index 455b6d2..b4d8565 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk2.Sort.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Hash.plan
index 8ad610e..d1c32a0 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Hash.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.customer.c_name (TEXT), default.region.r_regionkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.customer.c_name (TEXT) (asc),default.region.r_regionkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.customer.c_name (TEXT) (asc),default.region.r_regionkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Sort.plan
index 8ad610e..d1c32a0 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk3.Sort.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.customer.c_name (TEXT), default.region.r_regionkey (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.customer.c_name (TEXT) (asc),default.region.r_regionkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.customer.c_name (TEXT) (asc),default.region.r_regionkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
=> in schema: {(11) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Hash.plan
index 5cf2a69..4997c1d 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Hash.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
=> in schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Sort.plan
index 5cf2a69..4997c1d 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk4.Sort.plan
@@ -38,10 +38,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.customer
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(8)
+SORT(10)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
JOIN(6)(CROSS)
=> target list: ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)
@@ -68,7 +67,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(2)
=> Sort Keys: len (INT4) (asc),default.region.r_regionkey (INT4) (asc),default.region.r_name (TEXT) (asc),default.customer.c_custkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
=> in schema: {(13) ?multiply (INT4), default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT), default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4), len (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
index d83cdb8..a684a0c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
index d83cdb8..a684a0c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
index f39025c..e3cbb61 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -38,7 +38,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.b
PROJECTION(3)
=> Targets: a_name (TEXT), b_name (TEXT)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
index f39025c..e3cbb61 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -38,7 +38,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.b
PROJECTION(3)
=> Targets: a_name (TEXT), b_name (TEXT)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Hash.plan
index 2478dda..69ede30 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Hash.plan
@@ -33,7 +33,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.t4
- 1: type=Broadcast, tables=default.t3
JOIN(5)(INNER)
=> Join Cond: default.t3.id (INT8) = ?int8_1 (INT8)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Sort.plan
index 2478dda..69ede30 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testDifferentTypesJoinCondition.Sort.plan
@@ -33,7 +33,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.t4
- 1: type=Broadcast, tables=default.t3
JOIN(5)(INNER)
=> Join Cond: default.t3.id (INT8) = ?int8_1 (INT8)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
index c083fa1..af6c200 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
=> in schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
index c083fa1..af6c200 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
=> in schema: {(3) cond (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
index d83cdb8..a684a0c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
index d83cdb8..a684a0c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
- 1: type=Broadcast, tables=default.customer
-SORT(9)
+SORT(11)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
index accf06e..469668c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -34,8 +34,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.a
+ 0: type=Broadcast, tables=default.a
SELECTION(3)
=> Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
index accf06e..469668c 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -34,8 +34,7 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
=======================================================
[Enforcers]
- 0: type=Broadcast, tables=default.b
- 1: type=Broadcast, tables=default.a
+ 0: type=Broadcast, tables=default.a
SELECTION(3)
=> Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
index 0ce7b52..244bfa9 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
@@ -33,7 +33,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.b
JOIN(5)(INNER)
=> Join Cond: default.b.n_nationkey (INT4) = default.a.c_nationkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
index 0ce7b52..244bfa9 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
@@ -33,7 +33,6 @@ Block Id: eb_0000000000000_0000_000003 [ROOT]
[Enforcers]
0: type=Broadcast, tables=default.a
- 1: type=Broadcast, tables=default.b
JOIN(5)(INNER)
=> Join Cond: default.b.n_nationkey (INT4) = default.a.c_nationkey (INT4)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
index a5ba593..d5e2b9b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus (INT4)}
=> in schema: {(3) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
index a5ba593..d5e2b9b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
@@ -40,9 +40,8 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.region
- 1: type=Broadcast, tables=default.nation
-SORT(9)
+SORT(11)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -70,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.region.r_regionkey (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(3) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus (INT4)}
=> in schema: {(3) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Hash.plan
index 32fd54c..a8f9f8b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Hash.plan
@@ -44,10 +44,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_regionkey (INT4), v1 (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(9)
+SORT(11)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -80,7 +79,7 @@ PROJECTION(4)
=> in schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
SORT(3)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
=> in schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Sort.plan
index 32fd54c..a8f9f8b 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs1.Sort.plan
@@ -44,10 +44,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.nation.n_regionkey (INT4), v1 (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-SORT(9)
+SORT(11)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
JOIN(7)(INNER)
=> Join Cond: default.region.r_regionkey (INT4) = default.nation.n_regionkey (INT4)
@@ -80,7 +79,7 @@ PROJECTION(4)
=> in schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
SORT(3)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(10) on eb_0000000000000_0000_000003
+ SCAN(12) on eb_0000000000000_0000_000003
=> out schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
=> in schema: {(5) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), v1 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Hash.plan
index 5961cfe..d6252ea 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Hash.plan
@@ -51,10 +51,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=?plus (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), result (INT4), v1 (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-GROUP_BY(10)(?plus,n_regionkey,r_regionkey,result,v1)
+GROUP_BY(12)(?plus,n_regionkey,r_regionkey,result,v1)
=> exprs: (sum(?plus (INT4)))
=> target list: v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)
=> out schema:{(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
@@ -84,14 +83,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.nation.n_regionkey (INT4), v1 (INT4), num=32)
-SORT(12)
+SORT(14)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
GROUP_BY(3)(v1,n_regionkey,r_regionkey,?plus,result)
=> exprs: (sum(?sum_3 (INT8)))
=> target list: v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4) as plus1, result (INT4), total (INT8)
=> out schema:{(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
=> in schema:{(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
- SCAN(11) on eb_0000000000000_0000_000003
+ SCAN(13) on eb_0000000000000_0000_000003
=> out schema: {(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
=> in schema: {(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
@@ -111,7 +110,7 @@ PROJECTION(5)
=> in schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
SORT(4)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(13) on eb_0000000000000_0000_000004
+ SCAN(15) on eb_0000000000000_0000_000004
=> out schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
=> in schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Sort.plan
index 5961cfe..d6252ea 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvalsWithSameExprs2.Sort.plan
@@ -51,10 +51,9 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=?plus (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), result (INT4), v1 (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.nation
- 1: type=Broadcast, tables=default.region
+ 0: type=Broadcast, tables=default.region
-GROUP_BY(10)(?plus,n_regionkey,r_regionkey,result,v1)
+GROUP_BY(12)(?plus,n_regionkey,r_regionkey,result,v1)
=> exprs: (sum(?plus (INT4)))
=> target list: v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)
=> out schema:{(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
@@ -84,14 +83,14 @@ Block Id: eb_0000000000000_0000_000004 [INTERMEDIATE]
[Outgoing]
[q_0000000000000_0000] 4 => 5 (type=RANGE_SHUFFLE, key=default.nation.n_regionkey (INT4), v1 (INT4), num=32)
-SORT(12)
+SORT(14)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
GROUP_BY(3)(v1,n_regionkey,r_regionkey,?plus,result)
=> exprs: (sum(?sum_3 (INT8)))
=> target list: v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4) as plus1, result (INT4), total (INT8)
=> out schema:{(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
=> in schema:{(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
- SCAN(11) on eb_0000000000000_0000_000003
+ SCAN(13) on eb_0000000000000_0000_000003
=> out schema: {(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
=> in schema: {(6) v1 (INT4), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), ?plus (INT4), result (INT4), ?sum_3 (INT8)}
@@ -111,7 +110,7 @@ PROJECTION(5)
=> in schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
SORT(4)
=> Sort Keys: v1 (INT4) (asc),default.nation.n_regionkey (INT4) (asc)
- SCAN(13) on eb_0000000000000_0000_000004
+ SCAN(15) on eb_0000000000000_0000_000004
=> out schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
=> in schema: {(6) default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), plus1 (INT4), result (INT4), total (INT8), v1 (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
index 3a80bb4..f3b0e9d 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
@@ -45,124 +45,91 @@ SORT(6)
explain
-------------------------------
-------------------------------------------------------------------------------
-Execution Block Graph (TERMINAL - eb_0000000000000_0000_000009)
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000011)
-------------------------------------------------------------------------------
-|-eb_0000000000000_0000_000009
- |-eb_0000000000000_0000_000008
- |-eb_0000000000000_0000_000007
- |-eb_0000000000000_0000_000006
- |-eb_0000000000000_0000_000003
+|-eb_0000000000000_0000_000011
+ |-eb_0000000000000_0000_000010
+ |-eb_0000000000000_0000_000009
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000006
-3: eb_0000000000000_0000_000007
-4: eb_0000000000000_0000_000008
-5: eb_0000000000000_0000_000009
+1: eb_0000000000000_0000_000009
+2: eb_0000000000000_0000_000010
+3: eb_0000000000000_0000_000011
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
+Block Id: eb_0000000000000_0000_000009 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=joins.supplier_.s_suppkey (INT4), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
[Enforcers]
0: type=Broadcast, tables=joins.supplier_
- 1: type=Broadcast, tables=default.nation
- 2: type=Broadcast, tables=default.region
+ 1: type=Broadcast, tables=default.region
+ 2: type=Broadcast, tables=joins.part_
+ 3: type=Broadcast, tables=default.partsupp
-JOIN(14)(INNER)
- => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
- => target list: default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(9) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(4) on default.region
- => target list: default.region.r_regionkey (INT4)
- => out schema: {(1) default.region.r_regionkey (INT4)}
- => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
- JOIN(13)(INNER)
- => Join Cond: joins.supplier_.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
- => target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(8) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(3) on default.nation
- => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
- => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
- SCAN(1) on joins.supplier_
- => target list: joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
- => out schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000006 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=joins.part_
- 1: type=Broadcast, tables=default.partsupp
-
-JOIN(15)(INNER)
- => Join Cond: joins.part_.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
- => target list: default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
- => out schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(4) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- SCAN(2) on default.partsupp
- => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
- => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
- => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
- SCAN(0) on joins.part_
- => target list: joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
- => out schema: {(2) joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(9) joins.part_.p_brand (TEXT), joins.part_.p_comment (TEXT), joins.part_.p_container (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_name (TEXT), joins.part_.p_partkey (INT4), joins.part_.p_retailprice (FLOAT8), joins.part_.p_size (INT4), joins.part_.p_type (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000007 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=joins.supplier_.s_suppkey (INT4), num=32)
-[q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.partsupp.ps_suppkey (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
-
-SORT(20)
+SORT(26)
=> Sort Keys: joins.supplier_.s_acctbal (FLOAT8) (asc),joins.supplier_.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),joins.part_.p_partkey (INT4) (asc)
JOIN(16)(INNER)
=> Join Cond: joins.supplier_.s_suppkey (INT4) = default.partsupp.ps_suppkey (INT4)
=> target list: default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)
=> out schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=> in schema: {(10) default.nation.n_name (TEXT), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- SCAN(19) on eb_0000000000000_0000_000006
+ JOIN(15)(INNER)
+ => Join Cond: joins.part_.p_partkey (INT4) = default.partsupp.ps_partkey (INT4)
+ => target list: default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
=> out schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- => in schema: {(3) default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
- SCAN(18) on eb_0000000000000_0000_000003
+ => in schema: {(4) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
+ SCAN(2) on default.partsupp
+ => target list: default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)
+ => out schema: {(2) default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4)}
+ => in schema: {(5) default.partsupp.ps_availqty (INT4), default.partsupp.ps_comment (TEXT), default.partsupp.ps_partkey (INT4), default.partsupp.ps_suppkey (INT4), default.partsupp.ps_supplycost (FLOAT8)}
+ SCAN(0) on joins.part_
+ => target list: joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)
+ => out schema: {(2) joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4)}
+ => in schema: {(9) joins.part_.p_brand (TEXT), joins.part_.p_comment (TEXT), joins.part_.p_container (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_name (TEXT), joins.part_.p_partkey (INT4), joins.part_.p_retailprice (FLOAT8), joins.part_.p_size (INT4), joins.part_.p_type (TEXT)}
+ JOIN(14)(INNER)
+ => Join Cond: default.nation.n_regionkey (INT4) = default.region.r_regionkey (INT4)
+ => target list: default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
=> out schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
- => in schema: {(7) default.nation.n_name (TEXT), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(9) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), default.region.r_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ SCAN(4) on default.region
+ => target list: default.region.r_regionkey (INT4)
+ => out schema: {(1) default.region.r_regionkey (INT4)}
+ => in schema: {(3) default.region.r_comment (TEXT), default.region.r_name (TEXT), default.region.r_regionkey (INT4)}
+ JOIN(13)(INNER)
+ => Join Cond: joins.supplier_.s_nationkey (INT4) = default.nation.n_nationkey (INT4)
+ => target list: default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
+ => out schema: {(8) default.nation.n_name (TEXT), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(10) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ SCAN(3) on default.nation
+ => target list: default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)
+ => out schema: {(3) default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ => in schema: {(4) default.nation.n_comment (TEXT), default.nation.n_name (TEXT), default.nation.n_nationkey (INT4), default.nation.n_regionkey (INT4)}
+ SCAN(1) on joins.supplier_
+ => target list: joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)
+ => out schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
+ => in schema: {(7) joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_nationkey (INT4), joins.supplier_.s_phone (TEXT), joins.supplier_.s_suppkey (INT4)}
=======================================================
-Block Id: eb_0000000000000_0000_000008 [ROOT]
+Block Id: eb_0000000000000_0000_000010 [ROOT]
=======================================================
[Incoming]
-[q_0000000000000_0000] 7 => 8 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
+[q_0000000000000_0000] 9 => 10 (type=RANGE_SHUFFLE, key=default.nation.n_name (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_name (TEXT), num=32)
[Enforcers]
- 0: sorted input=eb_0000000000000_0000_000007
+ 0: sorted input=eb_0000000000000_0000_000009
SORT(6)
=> Sort Keys: joins.supplier_.s_acctbal (FLOAT8) (asc),joins.supplier_.s_name (TEXT) (asc),default.nation.n_name (TEXT) (asc),joins.part_.p_partkey (INT4) (asc)
- SCAN(21) on eb_0000000000000_0000_000007
+ SCAN(27) on eb_0000000000000_0000_000009
=> out schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=> in schema: {(8) default.nation.n_name (TEXT), joins.part_.p_mfgr (TEXT), joins.part_.p_partkey (INT4), joins.supplier_.s_acctbal (FLOAT8), joins.supplier_.s_address (TEXT), joins.supplier_.s_comment (TEXT), joins.supplier_.s_name (TEXT), joins.supplier_.s_phone (TEXT)}
=======================================================
-Block Id: eb_0000000000000_0000_000009 [TERMINAL]
+Block Id: eb_0000000000000_0000_000011 [TERMINAL]
=======================================================
[03/13] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan
new file mode 100644
index 0000000..f5486f9
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan
@@ -0,0 +1,132 @@
+explain
+-------------------------------
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+SCAN(1) on default.jointable14 as t4
+ => filter: default.t4.id (INT4) > 1
+ => target list: default.t4.id (INT4)
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(2) default.t4.id (INT4), default.t4.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+
+JOIN(8)(INNER)
+ => Join Cond: default.t1.id (INT4) = default.t4.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t4.id (INT4)}
+ => in schema: {(1) default.t4.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => filter: default.t3.id (INT4) > 1
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t4.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(9)(RIGHT_OUTER)
+ => Join Cond: default.t3.id (INT4) = 2 AND default.t4.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t3.id (INT4), default.t4.id (INT4)}
+ SCAN(14) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t4.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.result b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.result
new file mode 100644
index 0000000..4fc079a
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase2.1.result
@@ -0,0 +1,4 @@
+id,name,id,id
+-------------------------------
+2,table11-2,2,2
+null,null,3,null
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash.plan
new file mode 100644
index 0000000..1c2fd7a
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash.plan
@@ -0,0 +1,101 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
+4: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t1
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash_NoBroadcast.plan
new file mode 100644
index 0000000..5a589ff
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Hash_NoBroadcast.plan
@@ -0,0 +1,128 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(1) default.t2.id (INT4)}
+ SCAN(10) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort.plan
new file mode 100644
index 0000000..1c2fd7a
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort.plan
@@ -0,0 +1,101 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
+4: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+[Enforcers]
+ 0: type=Broadcast, tables=default.t1
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort_NoBroadcast.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort_NoBroadcast.plan
new file mode 100644
index 0000000..5a589ff
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.Sort_NoBroadcast.plan
@@ -0,0 +1,128 @@
+explain
+-------------------------------
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+ JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+ SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+explain
+-------------------------------
+-------------------------------------------------------------------------------
+Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
+-------------------------------------------------------------------------------
+|-eb_0000000000000_0000_000006
+ |-eb_0000000000000_0000_000005
+ |-eb_0000000000000_0000_000004
+ |-eb_0000000000000_0000_000003
+ |-eb_0000000000000_0000_000002
+ |-eb_0000000000000_0000_000001
+-------------------------------------------------------------------------------
+Order of Execution
+-------------------------------------------------------------------------------
+1: eb_0000000000000_0000_000001
+2: eb_0000000000000_0000_000002
+3: eb_0000000000000_0000_000003
+4: eb_0000000000000_0000_000004
+5: eb_0000000000000_0000_000005
+6: eb_0000000000000_0000_000006
+-------------------------------------------------------------------------------
+
+=======================================================
+Block Id: eb_0000000000000_0000_000001 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+SCAN(0) on default.jointable11 as t1
+ => target list: default.t1.id (INT4), default.t1.name (TEXT)
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000002 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+SCAN(1) on default.jointable12 as t2
+ => target list: default.t2.id (INT4)
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(2) default.t2.id (INT4), default.t2.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.t2.id (INT4), num=32)
+
+[Outgoing]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+
+JOIN(7)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t2.id (INT4) AND concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-11 OR concat(default.t1.name (TEXT),CAST (default.t2.id (INT4) AS TEXT)) = table11-33
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ SCAN(11) on eb_0000000000000_0000_000002
+ => out schema: {(1) default.t2.id (INT4)}
+ => in schema: {(1) default.t2.id (INT4)}
+ SCAN(10) on eb_0000000000000_0000_000001
+ => out schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+ => in schema: {(2) default.t1.id (INT4), default.t1.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000004 [LEAF]
+=======================================================
+
+[Outgoing]
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+SCAN(3) on default.jointable13 as t3
+ => target list: default.t3.id (INT4)
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(2) default.t3.id (INT4), default.t3.name (TEXT)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000005 [ROOT]
+=======================================================
+
+[Incoming]
+[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.t1.id (INT4), num=32)
+[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.t3.id (INT4), num=32)
+
+JOIN(8)(RIGHT_OUTER)
+ => Join Cond: default.t1.id (INT4) = default.t3.id (INT4)
+ => target list: default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)
+ => out schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ => in schema: {(4) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4), default.t3.id (INT4)}
+ SCAN(13) on eb_0000000000000_0000_000004
+ => out schema: {(1) default.t3.id (INT4)}
+ => in schema: {(1) default.t3.id (INT4)}
+ SCAN(12) on eb_0000000000000_0000_000003
+ => out schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+ => in schema: {(3) default.t1.id (INT4), default.t1.name (TEXT), default.t2.id (INT4)}
+
+=======================================================
+Block Id: eb_0000000000000_0000_000006 [TERMINAL]
+=======================================================
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.result b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.result
new file mode 100644
index 0000000..c5da2c4
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinPredicationCaseByCase3.1.result
@@ -0,0 +1,4 @@
+id,name,id,id
+-------------------------------
+2,table11-2,2,2
+null,null,null,3
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Hash.plan
index d33aa32..b271dcc 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Hash.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(RIGHT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Sort.plan
index d33aa32..b271dcc 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithEmptyTable1.Sort.plan
@@ -41,7 +41,7 @@ Block Id: eb_0000000000000_0000_000003 [LEAF]
[Enforcers]
0: type=Broadcast, tables=default.empty_orders
-SORT(8)
+SORT(10)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
JOIN(6)(RIGHT_OUTER)
=> Join Cond: default.customer.c_custkey (INT4) = default.empty_orders.o_orderkey (INT4)
@@ -69,7 +69,7 @@ Block Id: eb_0000000000000_0000_000004 [ROOT]
SORT(3)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.empty_orders.o_orderkey (INT4) (asc)
- SCAN(9) on eb_0000000000000_0000_000003
+ SCAN(11) on eb_0000000000000_0000_000003
=> out schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.empty_orders.o_orderkey (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Hash.plan
index e4156aa..4fb9de0 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Hash.plan
@@ -31,61 +31,24 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-SCAN(0) on default.customer
- => target list: default.customer.c_custkey (INT4)
- => out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.o.o_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(3) as default.o
- => Targets: default.o.o_orderkey (INT4)
- => out schema: {(1) default.o.o_orderkey (INT4)}
- => in schema: {(9) default.o.o_clerk (TEXT), default.o.o_comment (TEXT), default.o.o_custkey (INT4), default.o.o_orderdate (TEXT), default.o.o_orderkey (INT4), default.o.o_orderpriority (TEXT), default.o.o_orderstatus (TEXT), default.o.o_shippriority (INT4), default.o.o_totalprice (FLOAT8)}
- PROJECTION(2)
- => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderstatus (TEXT), default.orders.o_totalprice (FLOAT8), default.orders.o_orderdate (TEXT), default.orders.o_orderpriority (TEXT), default.orders.o_clerk (TEXT), default.orders.o_shippriority (INT4), default.orders.o_comment (TEXT)
- => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- SCAN(1) on default.orders
- => target list: default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)
- => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.o.o_orderkey (INT4), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.o.o_orderkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.orders
+
SORT(12)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.o.o_orderkey (INT4) (asc)
JOIN(8)(LEFT_OUTER)
@@ -93,12 +56,22 @@ SORT(12)
=> target list: default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)}
- SCAN(11) on eb_0000000000000_0000_000002
+ TABLE_SUBQUERY(3) as default.o
+ => Targets: default.o.o_orderkey (INT4)
=> out schema: {(1) default.o.o_orderkey (INT4)}
- => in schema: {(1) default.o.o_orderkey (INT4)}
- SCAN(10) on eb_0000000000000_0000_000001
+ => in schema: {(9) default.o.o_clerk (TEXT), default.o.o_comment (TEXT), default.o.o_custkey (INT4), default.o.o_orderdate (TEXT), default.o.o_orderkey (INT4), default.o.o_orderpriority (TEXT), default.o.o_orderstatus (TEXT), default.o.o_shippriority (INT4), default.o.o_totalprice (FLOAT8)}
+ PROJECTION(2)
+ => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderstatus (TEXT), default.orders.o_totalprice (FLOAT8), default.orders.o_orderdate (TEXT), default.orders.o_orderpriority (TEXT), default.orders.o_clerk (TEXT), default.orders.o_shippriority (INT4), default.orders.o_comment (TEXT)
+ => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ SCAN(1) on default.orders
+ => target list: default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)
+ => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ SCAN(0) on default.customer
+ => target list: default.customer.c_custkey (INT4)
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Sort.plan
index e4156aa..4fb9de0 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithConstantExpr2.Sort.plan
@@ -31,61 +31,24 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000005)
|-eb_0000000000000_0000_000005
|-eb_0000000000000_0000_000004
|-eb_0000000000000_0000_000003
- |-eb_0000000000000_0000_000002
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000002
-3: eb_0000000000000_0000_000003
-4: eb_0000000000000_0000_000004
-5: eb_0000000000000_0000_000005
+1: eb_0000000000000_0000_000003
+2: eb_0000000000000_0000_000004
+3: eb_0000000000000_0000_000005
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000003 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-
-SCAN(0) on default.customer
- => target list: default.customer.c_custkey (INT4)
- => out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000002 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.o.o_orderkey (INT4), num=32)
-
-TABLE_SUBQUERY(3) as default.o
- => Targets: default.o.o_orderkey (INT4)
- => out schema: {(1) default.o.o_orderkey (INT4)}
- => in schema: {(9) default.o.o_clerk (TEXT), default.o.o_comment (TEXT), default.o.o_custkey (INT4), default.o.o_orderdate (TEXT), default.o.o_orderkey (INT4), default.o.o_orderpriority (TEXT), default.o.o_orderstatus (TEXT), default.o.o_shippriority (INT4), default.o.o_totalprice (FLOAT8)}
- PROJECTION(2)
- => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderstatus (TEXT), default.orders.o_totalprice (FLOAT8), default.orders.o_orderdate (TEXT), default.orders.o_orderpriority (TEXT), default.orders.o_clerk (TEXT), default.orders.o_shippriority (INT4), default.orders.o_comment (TEXT)
- => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- SCAN(1) on default.orders
- => target list: default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)
- => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
- => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000003 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.customer.c_custkey (INT4), num=32)
-[q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.o.o_orderkey (INT4), num=32)
-
-[Outgoing]
[q_0000000000000_0000] 3 => 4 (type=RANGE_SHUFFLE, key=default.customer.c_custkey (INT4), default.o.o_orderkey (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.orders
+
SORT(12)
=> Sort Keys: default.customer.c_custkey (INT4) (asc),default.o.o_orderkey (INT4) (asc)
JOIN(8)(LEFT_OUTER)
@@ -93,12 +56,22 @@ SORT(12)
=> target list: default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)
=> out schema: {(2) default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)}
=> in schema: {(2) default.customer.c_custkey (INT4), default.o.o_orderkey (INT4)}
- SCAN(11) on eb_0000000000000_0000_000002
+ TABLE_SUBQUERY(3) as default.o
+ => Targets: default.o.o_orderkey (INT4)
=> out schema: {(1) default.o.o_orderkey (INT4)}
- => in schema: {(1) default.o.o_orderkey (INT4)}
- SCAN(10) on eb_0000000000000_0000_000001
+ => in schema: {(9) default.o.o_clerk (TEXT), default.o.o_comment (TEXT), default.o.o_custkey (INT4), default.o.o_orderdate (TEXT), default.o.o_orderkey (INT4), default.o.o_orderpriority (TEXT), default.o.o_orderstatus (TEXT), default.o.o_shippriority (INT4), default.o.o_totalprice (FLOAT8)}
+ PROJECTION(2)
+ => Targets: default.orders.o_orderkey (INT4), default.orders.o_custkey (INT4), default.orders.o_orderstatus (TEXT), default.orders.o_totalprice (FLOAT8), default.orders.o_orderdate (TEXT), default.orders.o_orderpriority (TEXT), default.orders.o_clerk (TEXT), default.orders.o_shippriority (INT4), default.orders.o_comment (TEXT)
+ => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ SCAN(1) on default.orders
+ => target list: default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)
+ => out schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ => in schema: {(9) default.orders.o_clerk (TEXT), default.orders.o_comment (TEXT), default.orders.o_custkey (INT4), default.orders.o_orderdate (TEXT), default.orders.o_orderkey (INT4), default.orders.o_orderpriority (TEXT), default.orders.o_orderstatus (TEXT), default.orders.o_shippriority (INT4), default.orders.o_totalprice (FLOAT8)}
+ SCAN(0) on default.customer
+ => target list: default.customer.c_custkey (INT4)
=> out schema: {(1) default.customer.c_custkey (INT4)}
- => in schema: {(1) default.customer.c_custkey (INT4)}
+ => in schema: {(8) default.customer.c_acctbal (FLOAT8), default.customer.c_address (TEXT), default.customer.c_comment (TEXT), default.customer.c_custkey (INT4), default.customer.c_mktsegment (TEXT), default.customer.c_name (TEXT), default.customer.c_nationkey (INT4), default.customer.c_phone (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000004 [ROOT]
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Hash.plan
index a978415..2e0cc87 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Hash.plan
@@ -37,88 +37,58 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
-5: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-
-SCAN(0) on default.jointable11 as a
- => target list: default.a.id (INT4)
- => out schema: {(1) default.a.id (INT4)}
- => in schema: {(2) default.a.id (INT4), default.a.name (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.lineitem
- 1: type=Broadcast, tables=default.jointable12
+ 0: type=Broadcast, tables=default.jointable12
+ 1: type=Broadcast, tables=default.lineitem
-TABLE_SUBQUERY(5) as default.b
- => Targets: default.b.id (INT4)
- => out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- PROJECTION(4)
- => Targets: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(1) default.jointable12.id (INT4)}
- JOIN(10)(INNER)
- => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
- => target list: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(2) default.jointable12.id (INT4), default.lineitem.l_orderkey (INT4)}
- SCAN(1) on default.jointable12
- => filter: default.jointable12.id (INT4) > 10
- => target list: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- SCAN(2) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4)
- => out schema: {(1) default.lineitem.l_orderkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), num=32)
-
-SORT(15)
+SORT(17)
=> Sort Keys: default.a.id (INT4) (asc)
JOIN(11)(LEFT_OUTER)
=> Join Cond: default.a.id (INT4) = default.b.id (INT4)
=> target list: default.a.id (INT4), default.b.id (INT4)
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
- SCAN(14) on eb_0000000000000_0000_000004
+ TABLE_SUBQUERY(5) as default.b
+ => Targets: default.b.id (INT4)
=> out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- SCAN(13) on eb_0000000000000_0000_000001
+ => in schema: {(1) default.b.id (INT4)}
+ PROJECTION(4)
+ => Targets: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(1) default.jointable12.id (INT4)}
+ JOIN(10)(INNER)
+ => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
+ => target list: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(2) default.jointable12.id (INT4), default.lineitem.l_orderkey (INT4)}
+ SCAN(1) on default.jointable12
+ => filter: default.jointable12.id (INT4) > 10
+ => target list: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ SCAN(2) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4)
+ => out schema: {(1) default.lineitem.l_orderkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ SCAN(0) on default.jointable11 as a
+ => target list: default.a.id (INT4)
=> out schema: {(1) default.a.id (INT4)}
- => in schema: {(1) default.a.id (INT4)}
+ => in schema: {(2) default.a.id (INT4), default.a.name (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
@@ -132,7 +102,7 @@ Block Id: eb_0000000000000_0000_000006 [ROOT]
SORT(7)
=> Sort Keys: default.a.id (INT4) (asc)
- SCAN(16) on eb_0000000000000_0000_000005
+ SCAN(18) on eb_0000000000000_0000_000005
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Sort.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Sort.plan
index a978415..2e0cc87 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery1.1.Sort.plan
@@ -37,88 +37,58 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000007)
|-eb_0000000000000_0000_000007
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000001
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
-5: eb_0000000000000_0000_000007
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
+3: eb_0000000000000_0000_000007
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000001 [LEAF]
+Block Id: eb_0000000000000_0000_000005 [LEAF]
=======================================================
[Outgoing]
-[q_0000000000000_0000] 1 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-
-SCAN(0) on default.jointable11 as a
- => target list: default.a.id (INT4)
- => out schema: {(1) default.a.id (INT4)}
- => in schema: {(2) default.a.id (INT4), default.a.name (TEXT)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
+[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), num=32)
[Enforcers]
- 0: type=Broadcast, tables=default.lineitem
- 1: type=Broadcast, tables=default.jointable12
+ 0: type=Broadcast, tables=default.jointable12
+ 1: type=Broadcast, tables=default.lineitem
-TABLE_SUBQUERY(5) as default.b
- => Targets: default.b.id (INT4)
- => out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- PROJECTION(4)
- => Targets: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(1) default.jointable12.id (INT4)}
- JOIN(10)(INNER)
- => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
- => target list: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(2) default.jointable12.id (INT4), default.lineitem.l_orderkey (INT4)}
- SCAN(1) on default.jointable12
- => filter: default.jointable12.id (INT4) > 10
- => target list: default.jointable12.id (INT4)
- => out schema: {(1) default.jointable12.id (INT4)}
- => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- SCAN(2) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4)
- => out schema: {(1) default.lineitem.l_orderkey (INT4)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000005 [INTERMEDIATE]
-=======================================================
-
-[Incoming]
-[q_0000000000000_0000] 1 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
-
-[Outgoing]
-[q_0000000000000_0000] 5 => 6 (type=RANGE_SHUFFLE, key=default.a.id (INT4), num=32)
-
-SORT(15)
+SORT(17)
=> Sort Keys: default.a.id (INT4) (asc)
JOIN(11)(LEFT_OUTER)
=> Join Cond: default.a.id (INT4) = default.b.id (INT4)
=> target list: default.a.id (INT4), default.b.id (INT4)
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
- SCAN(14) on eb_0000000000000_0000_000004
+ TABLE_SUBQUERY(5) as default.b
+ => Targets: default.b.id (INT4)
=> out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- SCAN(13) on eb_0000000000000_0000_000001
+ => in schema: {(1) default.b.id (INT4)}
+ PROJECTION(4)
+ => Targets: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(1) default.jointable12.id (INT4)}
+ JOIN(10)(INNER)
+ => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
+ => target list: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(2) default.jointable12.id (INT4), default.lineitem.l_orderkey (INT4)}
+ SCAN(1) on default.jointable12
+ => filter: default.jointable12.id (INT4) > 10
+ => target list: default.jointable12.id (INT4)
+ => out schema: {(1) default.jointable12.id (INT4)}
+ => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ SCAN(2) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4)
+ => out schema: {(1) default.lineitem.l_orderkey (INT4)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
+ SCAN(0) on default.jointable11 as a
+ => target list: default.a.id (INT4)
=> out schema: {(1) default.a.id (INT4)}
- => in schema: {(1) default.a.id (INT4)}
+ => in schema: {(2) default.a.id (INT4), default.a.name (TEXT)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [ROOT]
@@ -132,7 +102,7 @@ Block Id: eb_0000000000000_0000_000006 [ROOT]
SORT(7)
=> Sort Keys: default.a.id (INT4) (asc)
- SCAN(16) on eb_0000000000000_0000_000005
+ SCAN(18) on eb_0000000000000_0000_000005
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
http://git-wip-us.apache.org/repos/asf/tajo/blob/8fd9ae72/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Hash.plan
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Hash.plan
index c4c25da..45b95c2 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testLeftOuterJoinWithEmptySubquery2.1.Hash.plan
@@ -34,82 +34,52 @@ Execution Block Graph (TERMINAL - eb_0000000000000_0000_000006)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000006
|-eb_0000000000000_0000_000005
- |-eb_0000000000000_0000_000004
- |-eb_0000000000000_0000_000003
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
-1: eb_0000000000000_0000_000003
-2: eb_0000000000000_0000_000004
-3: eb_0000000000000_0000_000005
-4: eb_0000000000000_0000_000006
+1: eb_0000000000000_0000_000005
+2: eb_0000000000000_0000_000006
-------------------------------------------------------------------------------
=======================================================
-Block Id: eb_0000000000000_0000_000003 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-
-[Enforcers]
- 0: type=Broadcast, tables=default.lineitem
- 1: type=Broadcast, tables=default.jointable12
-
-TABLE_SUBQUERY(4) as default.a
- => Targets: default.a.id (INT4)
- => out schema: {(1) default.a.id (INT4)}
- => in schema: {(3) default.a.id (INT4), default.a.name (TEXT), default.a.l_shipdate (TEXT)}
- PROJECTION(3)
- => Targets: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
- => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- JOIN(9)(INNER)
- => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
- => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
- => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(4) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
- SCAN(0) on default.jointable12
- => filter: default.jointable12.id (INT4) > 10
- => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT)
- => out schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
- SCAN(1) on default.lineitem
- => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)
- => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
- => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
-
-=======================================================
-Block Id: eb_0000000000000_0000_000004 [LEAF]
-=======================================================
-
-[Outgoing]
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
-
-SCAN(5) on default.jointable11 as b
- => target list: default.b.id (INT4)
- => out schema: {(1) default.b.id (INT4)}
- => in schema: {(2) default.b.id (INT4), default.b.name (TEXT)}
-
-=======================================================
Block Id: eb_0000000000000_0000_000005 [ROOT]
=======================================================
-[Incoming]
-[q_0000000000000_0000] 3 => 5 (type=HASH_SHUFFLE, key=default.a.id (INT4), num=32)
-[q_0000000000000_0000] 4 => 5 (type=HASH_SHUFFLE, key=default.b.id (INT4), num=32)
+[Enforcers]
+ 0: type=Broadcast, tables=default.jointable12
+ 1: type=Broadcast, tables=default.b
JOIN(10)(LEFT_OUTER)
=> Join Cond: default.a.id (INT4) = default.b.id (INT4)
=> target list: default.a.id (INT4), default.b.id (INT4)
=> out schema: {(2) default.a.id (INT4), default.b.id (INT4)}
=> in schema: {(2) default.a.id (INT4), default.b.id (INT4)}
- SCAN(13) on eb_0000000000000_0000_000004
+ SCAN(5) on default.jointable11 as b
+ => target list: default.b.id (INT4)
=> out schema: {(1) default.b.id (INT4)}
- => in schema: {(1) default.b.id (INT4)}
- SCAN(12) on eb_0000000000000_0000_000003
+ => in schema: {(2) default.b.id (INT4), default.b.name (TEXT)}
+ TABLE_SUBQUERY(4) as default.a
+ => Targets: default.a.id (INT4)
=> out schema: {(1) default.a.id (INT4)}
- => in schema: {(1) default.a.id (INT4)}
+ => in schema: {(3) default.a.id (INT4), default.a.name (TEXT), default.a.l_shipdate (TEXT)}
+ PROJECTION(3)
+ => Targets: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ JOIN(9)(INNER)
+ => Join Cond: default.jointable12.id (INT4) = default.lineitem.l_orderkey (INT4)
+ => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(3) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(4) default.jointable12.id (INT4), default.jointable12.name (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
+ SCAN(0) on default.jointable12
+ => filter: default.jointable12.id (INT4) > 10
+ => target list: default.jointable12.id (INT4), default.jointable12.name (TEXT)
+ => out schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ => in schema: {(2) default.jointable12.id (INT4), default.jointable12.name (TEXT)}
+ SCAN(1) on default.lineitem
+ => target list: default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)
+ => out schema: {(2) default.lineitem.l_orderkey (INT4), default.lineitem.l_shipdate (TEXT)}
+ => in schema: {(16) default.lineitem.l_comment (TEXT), default.lineitem.l_commitdate (TEXT), default.lineitem.l_discount (FLOAT8), default.lineitem.l_extendedprice (FLOAT8), default.lineitem.l_linenumber (INT4), default.lineitem.l_linestatus (TEXT), default.lineitem.l_orderkey (INT4), default.lineitem.l_partkey (INT4), default.lineitem.l_quantity (FLOAT8), default.lineitem.l_receiptdate (TEXT), default.lineitem.l_returnflag (TEXT), default.lineitem.l_shipdate (TEXT), default.lineitem.l_shipinstruct (TEXT), default.lineitem.l_shipmode (TEXT), default.lineitem.l_suppkey (INT4), default.lineitem.l_tax (FLOAT8)}
=======================================================
Block Id: eb_0000000000000_0000_000006 [TERMINAL]