LENS-1444: Optimize the algorithm of finding all eligible union candidates
Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/a7f407bc Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/a7f407bc Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/a7f407bc Branch: refs/heads/master Commit: a7f407bcb59ffa84c8ab6e830ba98aee81516085 Parents: c174583 Author: Rajat Khandelwal <[email protected]> Authored: Fri Jun 23 16:39:37 2017 +0530 Committer: Rajat Khandelwal <[email protected]> Committed: Thu Jul 13 14:42:52 2017 +0530 ---------------------------------------------------------------------- .../cube/parse/CandidateCoveringSetsResolver.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/a7f407bc/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java index 61c28c6..8e07162 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java @@ -106,16 +106,6 @@ public class CandidateCoveringSetsResolver implements ContextRewriter { return true; } - private void pruneUnionCandidatesNotCoveringAllRanges(List<UnionCandidate> ucs, CubeQueryContext cubeql) { - for (Iterator<UnionCandidate> itr = ucs.iterator(); itr.hasNext();) { - UnionCandidate uc = itr.next(); - if (!isCandidateCoveringTimeRanges(uc, cubeql.getTimeRanges())) { - itr.remove(); - cubeql.addCandidatePruningMsg(uc, CandidateTablePruneCause.storageNotAvailableInRange(cubeql.getTimeRanges())); - } - } - } - private List<Candidate> resolveTimeRangeCoveringFactSet(CubeQueryContext cubeql, Set<QueriedPhraseContext> queriedMsrs, List<QueriedPhraseContext> qpcList) throws LensException { List<Candidate> candidateSet = new ArrayList<>(); @@ -138,8 +128,6 @@ public class CandidateCoveringSetsResolver implements ContextRewriter { getCombinations(new ArrayList<>(allCandidatesPartiallyValid), cubeql); // Sort the Collection based on no of elements unionCoveringSet.sort(Comparator.comparing(Candidate::getChildrenCount)); - // prune non covering sets - pruneUnionCandidatesNotCoveringAllRanges(unionCoveringSet, cubeql); // prune candidate set which doesn't contain any common measure i if (!queriedMsrs.isEmpty()) { pruneUnionCoveringSetWithoutAnyCommonMeasure(unionCoveringSet, queriedMsrs); @@ -197,7 +185,10 @@ public class CandidateCoveringSetsResolver implements ContextRewriter { clonedI = clonedI >>> 1; --count; } - combinations.add(new UnionCandidate(individualCombinationList, cubeql)); + UnionCandidate uc = new UnionCandidate(individualCombinationList, cubeql); + if (isCandidateCoveringTimeRanges(uc, cubeql.getTimeRanges())) { + combinations.add(uc); + } } return combinations; }
