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/30 06:05:18 UTC
[16/24] tajo git commit: TAJO-1553: Improve broadcast join planning.
(jihoon)
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)