|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcom.lucidera.opt.LoptSemiJoinOptimizer
public class LoptSemiJoinOptimizer
LoptSemiJoinOptimizer implements the logic for determining the optimal semijoins to be used in processing joins in a query.
| Nested Class Summary | |
|---|---|
private class |
LoptSemiJoinOptimizer.FactorCostComparator
|
| Field Summary | |
|---|---|
private RelNode[] |
chosenSemiJoins
Semijoins corresponding to each join factor, if they are going to be filtered by semijoins. |
private Comparator<Integer> |
factorCostComparator
|
private Map<Integer,Map<Integer,SemiJoinRel>> |
possibleSemiJoins
Associates potential semijoins with each fact table factor. |
private RexBuilder |
rexBuilder
RexBuilder for constructing new RexNodes |
private static int |
thresholdScore
|
| Constructor Summary | |
|---|---|
LoptSemiJoinOptimizer(LoptMultiJoin multiJoin,
RexBuilder rexBuilder)
|
|
| Method Summary | |
|---|---|
private RexNode |
adjustSemiJoinCondition(LoptMultiJoin multiJoin,
int leftAdjustment,
RexNode semiJoinCondition,
int leftIdx,
int rightIdx)
Modifies the semijoin condition to reflect the fact that the RHS is now the second factor into a join and the LHS is the first |
boolean |
chooseBestSemiJoin(LoptMultiJoin multiJoin)
Finds the optimal semijoin for filtering the least costly fact table from among the remaining possible semijoins to choose from. |
private double |
computeScore(RelNode factRel,
RelNode dimRel,
SemiJoinRel semiJoin)
Computes a score relevant to applying a set of semijoins on a fact table. |
private SemiJoinRel |
findSemiJoinIndexByCost(LoptMultiJoin multiJoin,
List<RexNode> joinFilters,
int factIdx,
int dimIdx)
Given a list of possible filters on a fact table, determine if there is an index that can be used, provided all the fact table keys originate from the same underlying table. |
RelNode |
getChosenSemiJoin(int factIdx)
|
private int |
isSuitableFilter(LoptMultiJoin multiJoin,
RexNode joinFilter,
int factIdx)
Determines if a join filter can be used with a semijoin against a specified fact table. |
void |
makePossibleSemiJoins(LoptMultiJoin multiJoin)
Determines all possible semijoins that can be used by dimension tables to filter fact tables. |
private RexNode |
removeExtraFilters(List<Integer> keys,
int nFields,
RexNode condition)
Removes from an expression any sub-expressions that reference key values that aren't contained in a key list passed in. |
private void |
removeJoin(LoptMultiJoin multiJoin,
SemiJoinRel semiJoin,
int factIdx,
int dimIdx)
Determines whether a join of the dimension table in a semijoin can be removed. |
private void |
removePossibleSemiJoin(Map<Integer,SemiJoinRel> possibleDimensions,
Integer factIdx,
Integer dimIdx)
Removes a dimension table from a fact table's list of possible semijoins |
private LcsTable |
validateKeys(RelNode factRel,
List<Integer> leftKeys,
List<Integer> rightKeys,
List<Integer> actualLeftKeys)
Validates the candidate semijoin keys corresponding to the fact table. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private static int thresholdScore
private RexBuilder rexBuilder
private RelNode[] chosenSemiJoins
private Map<Integer,Map<Integer,SemiJoinRel>> possibleSemiJoins
private final Comparator<Integer> factorCostComparator
| Constructor Detail |
|---|
public LoptSemiJoinOptimizer(LoptMultiJoin multiJoin,
RexBuilder rexBuilder)
| Method Detail |
|---|
public void makePossibleSemiJoins(LoptMultiJoin multiJoin)
multiJoin - join factors being optimized
private int isSuitableFilter(LoptMultiJoin multiJoin,
RexNode joinFilter,
int factIdx)
multiJoin - join factors being optimizedjoinFilter - filter to be analyzedfactIdx - index corresponding to the fact table
private SemiJoinRel findSemiJoinIndexByCost(LoptMultiJoin multiJoin,
List<RexNode> joinFilters,
int factIdx,
int dimIdx)
multiJoin - join factors being optimizedjoinFilters - filters to be used on the fact tablefactIdx - index in join factors corresponding to the fact tabledimIdx - index in join factors corresponding to the dimension table
private RexNode adjustSemiJoinCondition(LoptMultiJoin multiJoin,
int leftAdjustment,
RexNode semiJoinCondition,
int leftIdx,
int rightIdx)
multiJoin - join factors being optimizedleftAdjustment - amount the left RexInputRefs need to be adjusted bysemiJoinCondition - condition to be adjustedleftIdx - index of the join factor corresponding to the LHS of the
semijoin,rightIdx - index of the join factor corresponding to the RHS of the
semijoin
private LcsTable validateKeys(RelNode factRel,
List<Integer> leftKeys,
List<Integer> rightKeys,
List<Integer> actualLeftKeys)
factRel - fact table RelNodeleftKeys - fact table semijoin keysrightKeys - dimension table semijoin keysactualLeftKeys - the remaining valid fact table semijoin keys
private RexNode removeExtraFilters(List<Integer> keys,
int nFields,
RexNode condition)
keys - join keys from one side of the joinnFields - number of fields in the side of the join for which the
keys correspondcondition - original expression
public boolean chooseBestSemiJoin(LoptMultiJoin multiJoin)
multiJoin - join factors being optimized
private double computeScore(RelNode factRel,
RelNode dimRel,
SemiJoinRel semiJoin)
factRel - fact table being filtereddimRel - dimension table that participates in semijoinsemiJoin - semijoin between fact and dimension tables
private void removeJoin(LoptMultiJoin multiJoin,
SemiJoinRel semiJoin,
int factIdx,
int dimIdx)
multiJoin - join factors being optimizedsemiJoin - semijoin under considerationfactIdx - id of the fact table in the semijoindimIdx - id of the dimension table in the semijoin
private void removePossibleSemiJoin(Map<Integer,SemiJoinRel> possibleDimensions,
Integer factIdx,
Integer dimIdx)
possibleDimensions - possible dimension tables associated with the
fact tablefactIdx - index corresponding to fact tabledimIdx - index corresponding to dimension tablepublic RelNode getChosenSemiJoin(int factIdx)
factIdx - index corresponding to the desired factor
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||