Repository: lens Updated Branches: refs/heads/master 02cbd6bc3 -> fe66131a4
LENS-1377 : Optimize measure covering set to exclude fact covering all measures in other combinations Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/fe66131a Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/fe66131a Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/fe66131a Branch: refs/heads/master Commit: fe66131a47249afdecdacd080c115cebda2cae34 Parents: 02cbd6b Author: Amareshwari Sriramadasu <[email protected]> Authored: Mon Nov 21 12:15:55 2016 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Mon Nov 21 12:15:55 2016 +0530 ---------------------------------------------------------------------- .../lens/cube/parse/CandidateTableResolver.java | 41 ++++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/fe66131a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java index 510bd8c..e7fc557 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java @@ -355,36 +355,43 @@ class CandidateTableResolver implements ContextRewriter { List<CandidateFact> cfacts = new ArrayList<>(cfactsPassed); for (Iterator<CandidateFact> i = cfacts.iterator(); i.hasNext();) { CandidateFact cfact = i.next(); - i.remove(); if (!checkForFactColumnExistsAndValidForRange(cfact, msrs, cubeql)) { // cfact does not contain any of msrs and none of exprsWithMeasures are evaluable. // ignore the fact + i.remove(); continue; } else if (allEvaluable(cfact, msrs, cubeql)) { // return single set Set<CandidateFact> one = new LinkedHashSet<>(); one.add(cfact); cfactset.add(one); - } else { - // find the remaining measures in other facts - if (i.hasNext()) { - Set<QueriedPhraseContext> remainingMsrs = new HashSet<>(msrs); - Set<QueriedPhraseContext> coveredMsrs = coveredMeasures(cfact, msrs, cubeql); - remainingMsrs.removeAll(coveredMsrs); - - Set<Set<CandidateFact>> coveringSets = findCoveringSets(cubeql, cfacts, remainingMsrs); - if (!coveringSets.isEmpty()) { - for (Set<CandidateFact> set : coveringSets) { - set.add(cfact); - cfactset.add(set); - } - } else { - log.info("Couldnt find any set containing remaining measures:{} {} in {}", remainingMsrs, - cfactsPassed); + i.remove(); + } + } + // facts that contain all measures or no measures are removed from iteration. + // find other facts + for (Iterator<CandidateFact> i = cfacts.iterator(); i.hasNext();) { + CandidateFact cfact = i.next(); + i.remove(); + // find the remaining measures in other facts + if (i.hasNext()) { + Set<QueriedPhraseContext> remainingMsrs = new HashSet<>(msrs); + Set<QueriedPhraseContext> coveredMsrs = coveredMeasures(cfact, msrs, cubeql); + remainingMsrs.removeAll(coveredMsrs); + + Set<Set<CandidateFact>> coveringSets = findCoveringSets(cubeql, cfacts, remainingMsrs); + if (!coveringSets.isEmpty()) { + for (Set<CandidateFact> set : coveringSets) { + set.add(cfact); + cfactset.add(set); } + } else { + log.info("Couldnt find any set containing remaining measures:{} {} in {}", remainingMsrs, + cfactsPassed); } } } + log.info("Covering set {} for measures {} with factsPassed {}", cfactset, msrs, cfactsPassed); return cfactset; }
