Paul Rogers created DRILL-7451: ---------------------------------- Summary: Planner inserts project node even if scan handles project push-down Key: DRILL-7451 URL: https://issues.apache.org/jira/browse/DRILL-7451 Project: Apache Drill Issue Type: Bug Reporter: Paul Rogers
I created a "dummy" storage plugin for testing. The test does a simple query: {code:sql} SELECT a, b, c from dummy.myTable {code} The first test is to mark the plugin's group scan as supporting projection push down. However, Drill still creates a projection node in the logical plan: {code:json} "graph" : [ { "pop" : "DummyGroupScan", "@id" : 2, "columns" : [ "`**`" ], "userName" : "progers", "cost" : { "memoryCost" : 1.6777216E7, "outputRowCount" : 10000.0 } }, { "pop" : "project", "@id" : 1, "exprs" : [ { "ref" : "`a`", "expr" : "`a`" }, { "ref" : "`b`", "expr" : "`b`" }, { "ref" : "`c`", "expr" : "`c`" } ], "child" : 2, "outputProj" : true, "initialAllocation" : 1000000, "maxAllocation" : 10000000000, "cost" : { "memoryCost" : 1.6777216E7, "outputRowCount" : 10000.0 } }, { "pop" : "screen", "@id" : 0, "child" : 1, "initialAllocation" : 1000000, "maxAllocation" : 10000000000, "cost" : { "memoryCost" : 1.6777216E7, "outputRowCount" : 10000.0 } } ] {code} There is [a comment in the code|https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectIntoScanRule.java#L109] that suggests the project should be removed: {code:java} // project above scan may be removed in ProjectRemoveRule for // the case when it is trivial {code} As shown in the example, the project is trivial. There is a subtlety: it may be that the scan, unknown to the planner, produce additional columns, say {{d}} and {{e}} which the project operator is needed to remove. If this is the reason the project remains, perhaps we can add a flag of some kind where the group scan can insist that not only does it handle projection, it will not insert additional columns. At that point, the project is completely unnecessary in this case. This is not a functional bug; just a performance issue: we exercise the machinery of the project operator to do exactly nothing. -- This message was sent by Atlassian Jira (v8.3.4#803005)