[ https://issues.apache.org/jira/browse/DRILL-6099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16379390#comment-16379390 ]
ASF GitHub Bot commented on DRILL-6099: --------------------------------------- Github user gparai commented on a diff in the pull request: https://github.com/apache/drill/pull/1096#discussion_r171085780 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java --- @@ -55,18 +62,21 @@ public void onMatch(RelOptRuleCall call) { } }; - public static DrillPushLimitToScanRule LIMIT_ON_PROJECT = - new DrillPushLimitToScanRule( - RelOptHelper.some(DrillLimitRel.class, RelOptHelper.some( - DrillProjectRel.class, RelOptHelper.any(DrillScanRel.class))), - "DrillPushLimitToScanRule_LimitOnProject") { + public static DrillPushLimitToScanRule LIMIT_ON_PROJECT = new DrillPushLimitToScanRule( + RelOptHelper.some(DrillLimitRel.class, RelOptHelper.any(DrillProjectRel.class)), "DrillPushLimitToScanRule_LimitOnProject") { @Override public boolean matches(RelOptRuleCall call) { DrillLimitRel limitRel = call.rel(0); - DrillScanRel scanRel = call.rel(2); - // For now only applies to Parquet. And pushdown only apply limit but not offset, + DrillProjectRel projectRel = call.rel(1); + // pushdown only apply limit but not offset, // so if getFetch() return null no need to run this rule. - if (scanRel.getGroupScan().supportsLimitPushdown() && (limitRel.getFetch() != null)) { --- End diff -- We still have the LIMIT_ON_SCAN rule which does that check. This rule is changed from LIMIT_PROJECT_SCAN to LIMIT_PROJECT. The LIMIT_SCAN along with the LIMIT_PROJECT would work as the LIMIT_PROJECT_SCAN. > Drill does not push limit past project (flatten) if it cannot be pushed into > scan > --------------------------------------------------------------------------------- > > Key: DRILL-6099 > URL: https://issues.apache.org/jira/browse/DRILL-6099 > Project: Apache Drill > Issue Type: Bug > Affects Versions: 1.12.0 > Reporter: Gautam Kumar Parai > Assignee: Gautam Kumar Parai > Priority: Major > Fix For: 1.13.0 > > > It would be useful to have pushdown occur past flatten(project). Here is an > example to illustrate the issue: > {{explain plan without implementation for }}{{select name, > flatten(categories) as category from dfs.`/tmp/t_json_20` LIMIT 1;}} > {{DrillScreenRel}}{{ }} > {{ DrillLimitRel(fetch=[1])}}{{ }} > {{ DrillProjectRel(name=[$0], category=[FLATTEN($1)])}} > {{ DrillScanRel(table=[[dfs, /tmp/t_json_20]], groupscan=[EasyGroupScan > [selectionRoot=maprfs:/tmp/t_json_20, numFiles=1, columns=[`name`, > `categories`], files=[maprfs:///tmp/t_json_20/0_0_0.json]]])}} > ================================================================= > Content of 0_0_0.json > ================================================================= > { > "name" : "Eric Goldberg, MD", > "categories" : [ "Doctors", "Health & Medical" ] > } { > "name" : "Pine Cone Restaurant", > "categories" : [ "Restaurants" ] > } { > "name" : "Deforest Family Restaurant", > "categories" : [ "American (Traditional)", "Restaurants" ] > } { > "name" : "Culver's", > "categories" : [ "Food", "Ice Cream & Frozen Yogurt", "Fast Food", > "Restaurants" ] > } { > "name" : "Chang Jiang Chinese Kitchen", > "categories" : [ "Chinese", "Restaurants" ] > } > -- This message was sent by Atlassian JIRA (v7.6.3#76005)