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

drill git commit: DRILL-2170: For fragment parallelization, use max cost of operators instead of total cost (this makes it consistent with what ExcessiveExchangeRemover uses).

Repository: drill
Updated Branches:
  refs/heads/master b79f76619 -> ca28b9cba


DRILL-2170: For fragment parallelization, use max cost of operators instead of total cost (this makes it consistent with what ExcessiveExchangeRemover  uses).


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

Branch: refs/heads/master
Commit: ca28b9cba419702a58cbce43b31a9d731d824377
Parents: b79f766
Author: Aman Sinha <as...@maprtech.com>
Authored: Wed Feb 11 10:56:34 2015 -0800
Committer: Aman Sinha <as...@maprtech.com>
Committed: Wed Feb 11 18:35:51 2015 -0800

----------------------------------------------------------------------
 .../planner/fragment/SimpleParallelizer.java     |  4 +++-
 .../drill/exec/planner/fragment/Stats.java       | 11 +++++------
 .../exec/fn/impl/TestAggregateFunctions.java     | 19 +++++++++++++++++++
 3 files changed, 27 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/ca28b9cb/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java
index 434cdd4..0ece367 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java
@@ -182,7 +182,9 @@ public class SimpleParallelizer {
 
       Stats stats = wrapper.getStats();
 
-      double targetSlices = stats.getTotalCost()/parallelizationThreshold;
+      // Use max cost of all operators in this fragment; this is consistent with the
+      // calculation that ExcessiveExchangeRemover uses
+      double targetSlices = stats.getMaxCost()/parallelizationThreshold;
       int targetIntSlices = (int) Math.ceil(targetSlices);
 
       // figure out width.

http://git-wip-us.apache.org/repos/asf/drill/blob/ca28b9cb/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/Stats.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/Stats.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/Stats.java
index eda364b..85a7b86 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/Stats.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/Stats.java
@@ -22,14 +22,14 @@ public class Stats {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Stats.class);
 
   private int maxWidth = Integer.MAX_VALUE;
-  private double totalCost;
+  private double maxCost = 0.0;
 
   public void addMaxWidth(int maxWidth){
     this.maxWidth = Math.min(this.maxWidth, maxWidth);
   }
 
   public void addCost(double cost){
-    totalCost += cost;
+    maxCost = Math.max(maxCost, cost);
   }
 
   public int getMaxWidth() {
@@ -38,12 +38,11 @@ public class Stats {
 
   @Override
   public String toString() {
-    return "Stats [maxWidth=" + maxWidth + ", totalCost=" + totalCost + "]";
+    return "Stats [maxWidth=" + maxWidth + ", maxCost=" + maxCost + "]";
   }
 
-  public double getTotalCost(){
-    return totalCost;
+  public double getMaxCost() {
+    return maxCost;
   }
 
-
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/ca28b9cb/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
index 6424256..bf8af3b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
@@ -94,4 +94,23 @@ public class TestAggregateFunctions extends BaseTestQuery {
 
   }
 
+  @Test // DRILL-2170: Subquery has group-by, order-by on aggregate function and limit
+  public void testDrill2170() throws Exception {
+    String query =
+        "select count(*) as cnt from "
+        + "cp.`tpch/orders.parquet` o inner join\n"
+        + "(select l_orderkey, sum(l_quantity), sum(l_extendedprice) \n"
+        + "from cp.`tpch/lineitem.parquet` \n"
+        + "group by l_orderkey order by 3 limit 100) sq \n"
+        + "on sq.l_orderkey = o.o_orderkey";
+
+    testBuilder()
+    .sqlQuery(query)
+    .ordered()
+    .optionSettingQueriesForTestQuery("alter system set `planner.slice_target` = 1000")
+    .baselineColumns("cnt")
+    .baselineValues(100l)
+    .build().run();
+  }
+
 }