public void pruneCandidateFactWithCandidateSet(CandidateTablePruneCause pruneCause) { // remove candidate facts that are not part of any covering set Set<CandidateFact> allCoveringFacts = new HashSet<CandidateFact>(); for (Set<CandidateFact> set : candidateFactSets) { allCoveringFacts.addAll(set); } for (Iterator<CandidateFact> i = candidateFacts.iterator(); i.hasNext(); ) { CandidateFact cfact = i.next(); if (!allCoveringFacts.contains(cfact)) { log.info("Not considering fact table:{} as {}", cfact, pruneCause); addFactPruningMsgs(cfact.fact, pruneCause); i.remove(); } } }
public String toHQL() throws LensException { Set<CandidateFact> cfacts = pickCandidateFactToQuery(); Map<Dimension, CandidateDim> dimsToQuery = pickCandidateDimsToQuery(dimensions); log.info("facts:{}, dimsToQuery: {}", cfacts, dimsToQuery); if (autoJoinCtx != null) { // prune join paths for picked fact and dimensions autoJoinCtx.pruneAllPaths(cube, cfacts, dimsToQuery); } Map<CandidateFact, Set<Dimension>> factDimMap = new HashMap<>(); if (cfacts != null) { if (cfacts.size() > 1) { // copy ASTs for each fact for (CandidateFact cfact : cfacts) { cfact.copyASTs(this); factDimMap.put(cfact, new HashSet<>(dimsToQuery.keySet())); } } for (CandidateFact fact : cfacts) { addRangeClauses(fact); } } // pick dimension tables required during expression expansion for the picked fact and dimensions Set<Dimension> exprDimensions = new HashSet<Dimension>(); if (cfacts != null) { for (CandidateFact cfact : cfacts) { Set<Dimension> factExprDimTables = exprCtx.rewriteExprCtx(cfact, dimsToQuery, cfacts.size() > 1 ? cfact : this); exprDimensions.addAll(factExprDimTables); if (cfacts.size() > 1) { factDimMap.get(cfact).addAll(factExprDimTables); } } if (cfacts.size() > 1) { havingAST = MultiFactHQLContext.pushDownHaving(havingAST, this, cfacts); } } else { // dim only query exprDimensions.addAll(exprCtx.rewriteExprCtx(null, dimsToQuery, this)); } dimsToQuery.putAll(pickCandidateDimsToQuery(exprDimensions)); log.info("facts:{}, dimsToQuery: {}", cfacts, dimsToQuery); // pick denorm tables for the picked fact and dimensions Set<Dimension> denormTables = new HashSet<Dimension>(); if (cfacts != null) { for (CandidateFact cfact : cfacts) { Set<Dimension> factDenormTables = deNormCtx.rewriteDenormctx(cfact, dimsToQuery, cfacts.size() > 1); denormTables.addAll(factDenormTables); if (cfacts.size() > 1) { factDimMap.get(cfact).addAll(factDenormTables); } } } else { denormTables.addAll(deNormCtx.rewriteDenormctx(null, dimsToQuery, false)); } dimsToQuery.putAll(pickCandidateDimsToQuery(denormTables)); log.info("facts:{}, dimsToQuery: {}", cfacts, dimsToQuery); // Prune join paths once denorm tables are picked if (autoJoinCtx != null) { // prune join paths for picked fact and dimensions autoJoinCtx.pruneAllPaths(cube, cfacts, dimsToQuery); } if (autoJoinCtx != null) { // add optional dims from Join resolver Set<Dimension> joiningTables = new HashSet<Dimension>(); if (cfacts != null && cfacts.size() > 1) { for (CandidateFact cfact : cfacts) { Set<Dimension> factJoiningTables = autoJoinCtx.pickOptionalTables(cfact, factDimMap.get(cfact), this); factDimMap.get(cfact).addAll(factJoiningTables); joiningTables.addAll(factJoiningTables); } } else { joiningTables.addAll(autoJoinCtx.pickOptionalTables(null, dimsToQuery.keySet(), this)); } dimsToQuery.putAll(pickCandidateDimsToQuery(joiningTables)); } log.info("Picked Fact:{} dimsToQuery: {}", cfacts, dimsToQuery); pickedDimTables = dimsToQuery.values(); pickedFacts = cfacts; if (cfacts != null) { if (cfacts.size() > 1) { // Update ASTs for each fact for (CandidateFact cfact : cfacts) { cfact.updateASTs(this); } whereAST = MultiFactHQLContext.convertHavingToWhere( havingAST, this, cfacts, new DefaultAliasDecider()); } } hqlContext = createHQLContext(cfacts, dimsToQuery, factDimMap); return hqlContext.toHQL(); }
public void addQueriedExprsWithMeasures(Set<String> exprs) { queriedExprsWithMeasures.addAll(exprs); }
public void addQueriedExprs(Set<String> exprs) { queriedExprs.addAll(exprs); }
public void addQueriedMsrs(Set<String> msrs) { queriedMsrs.addAll(msrs); }
public void addQueriedDimAttrs(Set<String> dimAttrs) { queriedDimAttrs.addAll(dimAttrs); }