|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.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 optimizedprivate 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 semijoinprivate 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 |