LENS-414: Move LeastPartitionResolver after LeastFactResolver
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/b8995ed3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/b8995ed3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/b8995ed3 Branch: refs/heads/current-release-line Commit: b8995ed3ff3d25bca82448a12fdcbaafc6ada2d6 Parents: ff31ad9 Author: Amareshwari Sriramadasu <[email protected]> Authored: Fri Jun 12 11:44:33 2015 +0530 Committer: Rajat Khandelwal <[email protected]> Committed: Fri Jun 12 11:44:33 2015 +0530 ---------------------------------------------------------------------- .../main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java | 5 ++++- .../java/org/apache/lens/cube/parse/LeastPartitionResolver.java | 4 ++++ .../test/java/org/apache/lens/cube/parse/TestQueryMetrics.java | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/b8995ed3/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java index 57c91e7..72dc64b 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryRewriter.java @@ -175,10 +175,13 @@ public class CubeQueryRewriter { rewriters.add(denormResolver); // Prune candidate facts without any valid expressions rewriters.add(exprResolver); - rewriters.add(new LeastPartitionResolver(conf)); + // We can have LightestFactResolver before LeastPartitionResolver - that says + // "if two facts have the same least weight, then the fact with least number of time partitions queried will be + // picked". This will be useful, if users did not set fact weights. if (!lightFactFirst) { rewriters.add(new LightestFactResolver(conf)); } + rewriters.add(new LeastPartitionResolver(conf)); rewriters.add(new LightestDimensionResolver(conf)); } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/b8995ed3/lens-cube/src/main/java/org/apache/lens/cube/parse/LeastPartitionResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/LeastPartitionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/LeastPartitionResolver.java index d0b3ccb..6e4e948 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/LeastPartitionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/LeastPartitionResolver.java @@ -41,6 +41,10 @@ class LeastPartitionResolver implements ContextRewriter { if (cubeql.getCube() != null && !cubeql.getCandidateFactSets().isEmpty()) { Map<Set<CandidateFact>, Integer> factPartCount = new HashMap<Set<CandidateFact>, Integer>(); + //The number of partitions being calculated is not the actual number of partitions, + // they are number of time values now instead of partitions. + // This seems fine, as the less number of time values actually represent the rollups on time. And with + // MaxCoveringFactResolver facts with less partitions which are not covering the range would be removed. for (Set<CandidateFact> facts : cubeql.getCandidateFactSets()) { factPartCount.put(facts, getPartCount(facts)); } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/b8995ed3/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java index 39f70eb..255aade 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java @@ -57,9 +57,9 @@ public class TestQueryMetrics extends TestQueryRewrite { "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.FieldValidator-ITER-7", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.GroupbyResolver-ITER-6", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.JoinResolver-ITER-8", - "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-17", + "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-18", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-19", - "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-18", + "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-17", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.MaxCoveringFactResolver-ITER-13", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-11", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-12",
