You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by jn...@apache.org on 2015/02/12 17:50:12 UTC

drill git commit: DRILL-2087: Fix an incorrect join plan by ensure either both sides are distributed, or none of them is distributed.

Repository: drill
Updated Branches:
  refs/heads/master 066b6dbc3 -> de89f36d9


DRILL-2087: Fix an incorrect join plan by ensure either both sides are distributed, or none of them is distributed.

Add unit testcase.


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/de89f36d
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/de89f36d
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/de89f36d

Branch: refs/heads/master
Commit: de89f36d9e90ea40f1566b8eb506fb9d656a0d0d
Parents: 066b6db
Author: Jinfeng Ni <jn...@maprtech.com>
Authored: Wed Jan 28 10:12:30 2015 -0800
Committer: Jinfeng Ni <jn...@apache.org>
Committed: Thu Feb 12 08:49:00 2015 -0800

----------------------------------------------------------------------
 .../visitor/ExcessiveExchangeIdentifier.java      |   9 +++++++++
 .../java/org/apache/drill/TestExampleQueries.java |  17 +++++++++++++++++
 .../test/resources/tpchmulti/nation/01.parquet    | Bin 0 -> 1376 bytes
 .../test/resources/tpchmulti/nation/02.parquet    | Bin 0 -> 1400 bytes
 .../test/resources/tpchmulti/nation/03.parquet    | Bin 0 -> 1279 bytes
 .../test/resources/tpchmulti/region/01.parquet    | Bin 0 -> 564 bytes
 .../test/resources/tpchmulti/region/02.parquet    | Bin 0 -> 491 bytes
 .../test/resources/tpchmulti/region/03.parquet    | Bin 0 -> 506 bytes
 8 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
index 82409d8..a237014 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
@@ -72,6 +72,15 @@ public class ExcessiveExchangeIdentifier extends BasePrelVisitor<Prel, Excessive
   public Prel visitPrel(Prel prel, MajorFragmentStat s) throws RuntimeException {
     List<RelNode> children = Lists.newArrayList();
     s.add(prel);
+
+    // Add all children to MajorFragmentStat, before we visit each child.
+    // Since MajorFramentStat keeps track of maxRows of Prels in MajorFrag, it's fine to add prel multiple times.
+    // Doing this will ensure MajorFragmentStat is same when visit each individual child, in order to make
+    // consistent decision.
+    for (Prel p : prel) {
+      s.add(p);
+    }
+
     for(Prel p : prel) {
       children.add(p.accept(this, s));
     }

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
index dffa0a6..f9ef8ad 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
@@ -20,6 +20,7 @@ package org.apache.drill;
 import static org.junit.Assert.assertEquals;
 
 import org.apache.drill.common.util.FileUtils;
+import org.apache.drill.common.util.TestTools;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -549,4 +550,20 @@ public class TestExampleQueries extends BaseTestQuery{
     .build().run();
   }
 
+  @Test
+  public void testExchangeRemoveForJoinPlan() throws Exception {
+    final String WORKING_PATH = TestTools.getWorkingPath();
+    final String TEST_RES_PATH = WORKING_PATH + "/src/test/resources";
+
+    String sql = String.format("select t2.n_nationkey from dfs_test.`%s/tpchmulti/region` t1 join dfs_test.`%s/tpchmulti/nation` t2 on t2.n_regionkey = t1.r_regionkey", TEST_RES_PATH, TEST_RES_PATH);
+
+    testBuilder()
+        .unOrdered()
+        .optionSettingQueriesForTestQuery("alter session set `planner.slice_target` = 10; alter session set `planner.join.row_count_estimate_factor` = 0.1")  // Enforce exchange will be inserted.
+        .sqlQuery(sql)
+        .optionSettingQueriesForBaseline("alter session set `planner.slice_target` = 100000; alter session set `planner.join.row_count_estimate_factor` = 1.0") // Use default option setting.
+        .sqlBaselineQuery(sql)
+        .build().run();
+
+  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/nation/01.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/nation/01.parquet b/exec/java-exec/src/test/resources/tpchmulti/nation/01.parquet
new file mode 100644
index 0000000..ad9d93c
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/nation/01.parquet differ

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/nation/02.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/nation/02.parquet b/exec/java-exec/src/test/resources/tpchmulti/nation/02.parquet
new file mode 100644
index 0000000..e68f1f1
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/nation/02.parquet differ

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/nation/03.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/nation/03.parquet b/exec/java-exec/src/test/resources/tpchmulti/nation/03.parquet
new file mode 100644
index 0000000..e578e36
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/nation/03.parquet differ

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/region/01.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/region/01.parquet b/exec/java-exec/src/test/resources/tpchmulti/region/01.parquet
new file mode 100644
index 0000000..3c6da60
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/region/01.parquet differ

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/region/02.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/region/02.parquet b/exec/java-exec/src/test/resources/tpchmulti/region/02.parquet
new file mode 100644
index 0000000..f3c544a
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/region/02.parquet differ

http://git-wip-us.apache.org/repos/asf/drill/blob/de89f36d/exec/java-exec/src/test/resources/tpchmulti/region/03.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/tpchmulti/region/03.parquet b/exec/java-exec/src/test/resources/tpchmulti/region/03.parquet
new file mode 100644
index 0000000..866ec62
Binary files /dev/null and b/exec/java-exec/src/test/resources/tpchmulti/region/03.parquet differ