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 2018/01/24 18:35:16 UTC
[02/11] drill git commit: DRILL-6093 : Account for simple columns in
project cpu costing
DRILL-6093 : Account for simple columns in project cpu costing
close apache/drill#1093
Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/a2058fd1
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/a2058fd1
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/a2058fd1
Branch: refs/heads/master
Commit: a2058fd16b555cebd0a539d5c9b993e0d628eced
Parents: 7d1e81a
Author: Gautam Parai <gp...@maprtech.com>
Authored: Tue Jan 16 15:16:16 2018 -0800
Committer: Aman Sinha <as...@maprtech.com>
Committed: Tue Jan 23 14:40:33 2018 -0800
----------------------------------------------------------------------
.../drill/exec/planner/common/DrillProjectRelBase.java | 10 ++++++----
.../test/java/org/apache/drill/TestProjectPushDown.java | 11 +++++++++++
2 files changed, 17 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/drill/blob/a2058fd1/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillProjectRelBase.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillProjectRelBase.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillProjectRelBase.java
index 44d708e..8141a8c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillProjectRelBase.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillProjectRelBase.java
@@ -74,10 +74,12 @@ public abstract class DrillProjectRelBase extends Project implements DrillRelNod
if (PrelUtil.getSettings(getCluster()).useDefaultCosting()) {
return super.computeSelfCost(planner, mq).multiplyBy(.1);
}
-
- // cost is proportional to the number of rows and number of columns being projected
- double rowCount = nonSimpleFieldCount > 0 ? mq.getRowCount(this) : 0;
- double cpuCost = DrillCostBase.PROJECT_CPU_COST * rowCount * nonSimpleFieldCount;
+ double rowCount = mq.getRowCount(this);
+ // Attribute small cost for projecting simple fields. In reality projecting simple columns in not free and
+ // this allows projection pushdown/project-merge rules to kick-in thereby eliminating unneeded columns from
+ // the projection.
+ double cpuCost = DrillCostBase.PROJECT_CPU_COST * rowCount * nonSimpleFieldCount
+ + (this.getRowType().getFieldCount() - nonSimpleFieldCount) * rowCount * DrillCostBase.BASE_CPU_COST;
DrillCostFactory costFactory = (DrillCostFactory) planner.getCostFactory();
return costFactory.makeCost(rowCount, cpuCost, 0, 0);
http://git-wip-us.apache.org/repos/asf/drill/blob/a2058fd1/exec/java-exec/src/test/java/org/apache/drill/TestProjectPushDown.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestProjectPushDown.java b/exec/java-exec/src/test/java/org/apache/drill/TestProjectPushDown.java
index ad55a0d..013c954 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestProjectPushDown.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestProjectPushDown.java
@@ -287,6 +287,17 @@ public class TestProjectPushDown extends PlanTestBase {
}
}
+ @Test
+ public void testProjectPushdownPastJoinWithJoinPushExpressions() throws Exception {
+ final String query = "SELECT L.L_QUANTITY FROM cp.`tpch/lineitem.parquet` L, cp.`tpch/orders.parquet` O" +
+ " WHERE cast(L.L_ORDERKEY as int) = cast(O.O_ORDERKEY as int)";
+ final String[] expectedPatterns = {
+ ".*HashJoin.*", "Project.*\\(L_QUANTITY.*CAST\\(\\$0\\)\\:INTEGER.*", "Project.*CAST\\(\\$0\\)\\:INTEGER.*"};
+ // L_ORDERKEY, O_ORDERKEY should not be present in the projects below the join
+ final String[] excludedPatterns = {".*Project\\(L_ORDERKEY=.*", ".*Project\\(O_ORDERKEY=.*"};
+ PlanTestBase.testPlanMatchingPatterns(query, expectedPatterns, excludedPatterns);
+ }
+
protected void testPushDown(PushDownTestInstance test) throws Exception {
testPhysicalPlan(test.getSql(), test.getExpected());
}