Repository: incubator-drill Updated Branches: refs/heads/master 790a2adf0 -> dcc94a398
Drill-1091: Make filter propagate best rel's collation trait. Fix StreamingAggPrule and HashAggPrule's pattern matching to look for child RelNodes. Added variation of TPCH 19 and enabled the modified version in test suite. Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/a59debbb Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/a59debbb Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/a59debbb Branch: refs/heads/master Commit: a59debbb2f1562c357d2f444f89cc3887e36319b Parents: 790a2ad Author: Aman Sinha <[email protected]> Authored: Sun Jun 29 16:02:42 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Mon Jul 7 14:48:54 2014 -0700 ---------------------------------------------------------------------- .../exec/planner/physical/FilterPrule.java | 23 +++++++------ .../exec/planner/physical/HashAggPrule.java | 3 +- .../exec/planner/physical/StreamAggPrule.java | 5 +-- .../org/apache/drill/TestTpchDistributed.java | 5 +++ .../java/org/apache/drill/TestTpchExplain.java | 1 + .../org/apache/drill/TestTpchSingleMode.java | 1 + .../src/test/resources/queries/tpch/19_1.sql | 35 ++++++++++++++++++++ 7 files changed, 56 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/FilterPrule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/FilterPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/FilterPrule.java index 1c1c611..e72a780 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/FilterPrule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/FilterPrule.java @@ -17,13 +17,11 @@ */ package org.apache.drill.exec.planner.physical; -import org.apache.drill.exec.planner.common.DrillProjectRelBase; import org.apache.drill.exec.planner.logical.DrillFilterRel; -import org.apache.drill.exec.planner.logical.DrillRel; import org.apache.drill.exec.planner.logical.RelOptHelper; -import org.eigenbase.rel.ProjectRel; +import org.eigenbase.rel.RelCollation; +import org.eigenbase.rel.RelCollationTraitDef; import org.eigenbase.rel.RelNode; -import org.eigenbase.relopt.Convention; import org.eigenbase.relopt.RelOptRule; import org.eigenbase.relopt.RelOptRuleCall; import org.eigenbase.relopt.RelTraitSet; @@ -43,16 +41,19 @@ public class FilterPrule extends Prule { RelTraitSet traits = input.getTraitSet().plus(Prel.DRILL_PHYSICAL); RelNode convertedInput = convert(input, traits); - + boolean transform = false; + if (convertedInput instanceof RelSubset) { RelSubset subset = (RelSubset) convertedInput; - for (RelNode rel : subset.getRelList()) { - if (!rel.getTraitSet().getTrait(DrillDistributionTraitDef.INSTANCE).equals(DrillDistributionTrait.DEFAULT)) { - call.transformTo(new FilterPrel(filter.getCluster(), rel.getTraitSet(), convertedInput, filter.getCondition())); - } - } - } else{ + RelNode bestRel = null; + if ((bestRel = subset.getBest()) != null) { + call.transformTo(new FilterPrel(filter.getCluster(), bestRel.getTraitSet(), convertedInput, filter.getCondition())); + transform = true; + } + } + if (!transform) { call.transformTo(new FilterPrel(filter.getCluster(), convertedInput.getTraitSet(), convertedInput, filter.getCondition())); } } + } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java index 95c8362..d8b2338 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java @@ -20,7 +20,6 @@ package org.apache.drill.exec.planner.physical; import java.util.logging.Logger; import org.apache.drill.exec.planner.logical.DrillAggregateRel; -import org.apache.drill.exec.planner.logical.DrillRel; import org.apache.drill.exec.planner.logical.RelOptHelper; import org.apache.drill.exec.planner.physical.AggPrelBase.OperatorPhase; import org.eigenbase.rel.InvalidRelException; @@ -38,7 +37,7 @@ public class HashAggPrule extends AggPruleBase { protected static final Logger tracer = EigenbaseTrace.getPlannerTracer(); private HashAggPrule() { - super(RelOptHelper.some(DrillAggregateRel.class, RelOptHelper.any(DrillRel.class)), "Prel.HashAggPrule"); + super(RelOptHelper.some(DrillAggregateRel.class, RelOptHelper.any(RelNode.class)), "HashAggPrule"); } @Override http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java index 9a60a14..47a56b8 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java @@ -23,11 +23,8 @@ import java.util.logging.Logger; import net.hydromatic.optiq.util.BitSets; import org.apache.drill.exec.planner.logical.DrillAggregateRel; -import org.apache.drill.exec.planner.logical.DrillRel; import org.apache.drill.exec.planner.logical.RelOptHelper; import org.apache.drill.exec.planner.physical.AggPrelBase.OperatorPhase; -import org.apache.drill.exec.planner.physical.DrillDistributionTrait.DistributionField; -import org.eigenbase.rel.AggregateCall; import org.eigenbase.rel.InvalidRelException; import org.eigenbase.rel.RelCollation; import org.eigenbase.rel.RelCollationImpl; @@ -47,7 +44,7 @@ public class StreamAggPrule extends AggPruleBase { protected static final Logger tracer = EigenbaseTrace.getPlannerTracer(); private StreamAggPrule() { - super(RelOptHelper.any(DrillAggregateRel.class), "Prel.StreamAggPrule"); + super(RelOptHelper.some(DrillAggregateRel.class, RelOptHelper.any(RelNode.class)), "StreamAggPrule"); } @Override http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/test/java/org/apache/drill/TestTpchDistributed.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestTpchDistributed.java b/exec/java-exec/src/test/java/org/apache/drill/TestTpchDistributed.java index 3c8bd09..adf5778 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/TestTpchDistributed.java +++ b/exec/java-exec/src/test/java/org/apache/drill/TestTpchDistributed.java @@ -129,6 +129,11 @@ public class TestTpchDistributed extends BaseTestQuery{ } @Test + public void tpch19_1() throws Exception{ + testDistributed("queries/tpch/19_1.sql"); + } + + @Test public void tpch20() throws Exception{ testDistributed("queries/tpch/20.sql"); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/test/java/org/apache/drill/TestTpchExplain.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestTpchExplain.java b/exec/java-exec/src/test/java/org/apache/drill/TestTpchExplain.java index 651da72..7dc5af7 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/TestTpchExplain.java +++ b/exec/java-exec/src/test/java/org/apache/drill/TestTpchExplain.java @@ -138,6 +138,7 @@ public class TestTpchExplain extends BaseTestQuery{ } @Test + @Ignore public void tpch21() throws Exception{ doExplain("queries/tpch/21.sql"); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/test/java/org/apache/drill/TestTpchSingleMode.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestTpchSingleMode.java b/exec/java-exec/src/test/java/org/apache/drill/TestTpchSingleMode.java index f7cb210..0098eb8 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/TestTpchSingleMode.java +++ b/exec/java-exec/src/test/java/org/apache/drill/TestTpchSingleMode.java @@ -138,6 +138,7 @@ public class TestTpchSingleMode extends BaseTestQuery{ } @Test + @Ignore public void tpch21() throws Exception{ testSingleMode("queries/tpch/21.sql"); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/a59debbb/exec/java-exec/src/test/resources/queries/tpch/19_1.sql ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/resources/queries/tpch/19_1.sql b/exec/java-exec/src/test/resources/queries/tpch/19_1.sql new file mode 100644 index 0000000..6d7f9c0 --- /dev/null +++ b/exec/java-exec/src/test/resources/queries/tpch/19_1.sql @@ -0,0 +1,35 @@ +-- tpch19 using 1395599672 as a seed to the RNG +select + sum(l.l_extendedprice* (1 - l.l_discount)) as revenue +from + cp.`tpch/lineitem.parquet` l, + cp.`tpch/part.parquet` p +where + p.p_partkey = l.l_partkey + and ( + ( + p.p_brand = 'Brand#41' + and p.p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') + and l.l_quantity >= 2 and l.l_quantity <= 2 + 10 + and p.p_size between 1 and 5 + and l.l_shipmode in ('AIR', 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p.p_brand = 'Brand#13' + and p.p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') + and l.l_quantity >= 14 and l.l_quantity <= 14 + 10 + and p.p_size between 1 and 10 + and l.l_shipmode in ('AIR', 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p.p_brand = 'Brand#55' + and p.p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') + and l.l_quantity >= 23 and l.l_quantity <= 23 + 10 + and p.p_size between 1 and 15 + and l.l_shipmode in ('AIR', 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ) ); \ No newline at end of file
