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();
+ }
+
}