gparai commented on a change in pull request #1640: DRILL-7038: Queries on partitioned columns scan the entire datasets URL: https://github.com/apache/drill/pull/1640#discussion_r258305067
########## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java ########## @@ -550,4 +567,180 @@ private static void setPruneStatus(MetadataContext metaContext, PruneStatus prun } } + private static class PruneFilesOnScanRule extends PruneScanRule { + + private final Pattern dirPattern; + + private PruneFilesOnScanRule(OptimizerRulesContext optimizerRulesContext) { + super(RelOptHelper.some(Aggregate.class, DrillRel.DRILL_LOGICAL, RelOptHelper.any(TableScan.class)), + "PruneFilesOnScanRule:Prune_On_Scan", optimizerRulesContext); + String partitionColumnLabel = optimizerRulesContext.getPlannerSettings().getFsPartitionColumnLabel(); + dirPattern = Pattern.compile(partitionColumnLabel + "\\d+"); + } + + @Override + public PartitionDescriptor getPartitionDescriptor(PlannerSettings settings, TableScan scanRel) { + return new FileSystemPartitionDescriptor(settings, scanRel); + } + + @Override + public boolean matches(RelOptRuleCall call) { + Aggregate aggregate = call.rel(0); + TableScan scan = call.rel(1); + + if (!isQualifiedFilePruning(scan) + || scan.getRowType().getFieldCount() != aggregate.getRowType().getFieldCount()) { + return false; + } + + List<String> fieldNames = scan.getRowType().getFieldNames(); + // Check if select contains partition columns (dir0, dir1, dir2,..., dirN) only + for (String field : fieldNames) { + if (!dirPattern.matcher(field).matches()) { + return false; + } + } + + return scan.isDistinct() || aggregate.getGroupCount() > 0; + } + + @Override + public void onMatch(RelOptRuleCall call) { Review comment: Please add a comment describing what this transformation does maybe with an example. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services