public class RelMdUtil extends Object
| Modifier and Type | Field and Description |
|---|---|
static SqlFunction |
ARTIFICIAL_SELECTIVITY_FUNC |
| Modifier and Type | Method and Description |
|---|---|
static boolean |
areColumnsDefinitelyUnique(RelNode rel,
ImmutableBitSet colMask)
Returns true if the columns represented in a bit mask are definitely
known to form a unique column set.
|
static boolean |
areColumnsDefinitelyUnique(RelNode rel,
List<RexInputRef> columnRefs) |
static boolean |
areColumnsDefinitelyUniqueWhenNullsFiltered(RelNode rel,
ImmutableBitSet colMask)
Returns true if the columns represented in a bit mask are definitely
known to form a unique column set, when nulls have been filtered from
the columns.
|
static boolean |
areColumnsDefinitelyUniqueWhenNullsFiltered(RelNode rel,
List<RexInputRef> columnRefs) |
static Boolean |
areColumnsUnique(RelNode rel,
List<RexInputRef> columnRefs) |
static Boolean |
areColumnsUniqueWhenNullsFiltered(RelNode rel,
List<RexInputRef> columnRefs) |
static double |
capInfinity(Double d)
Caps a double value at Double.MAX_VALUE if it's currently infinity
|
static Double |
cardOfProjExpr(Project rel,
RexNode expr)
Computes the cardinality of a particular expression from the projection
list
|
static double |
computeSemiJoinSelectivity(RelNode factRel,
RelNode dimRel,
List<Integer> factKeyList,
List<Integer> dimKeyList)
Computes the selectivity of a semijoin filter if it is applied on a fact
table.
|
static double |
computeSemiJoinSelectivity(RelNode factRel,
RelNode dimRel,
SemiJoin rel)
Computes the selectivity of a semijoin filter if it is applied on a fact
table.
|
static double |
computeSemiJoinSelectivity(SemiJoin rel)
Computes the selectivity of a semijoin filter if it is applied on a fact
table.
|
static Double |
getJoinDistinctRowCount(RelNode joinRel,
JoinRelType joinType,
ImmutableBitSet groupKey,
RexNode predicate,
boolean useMaxNdv)
Computes the number of distinct rows for a set of keys returned from a
join.
|
static Double |
getJoinPopulationSize(RelNode joinRel,
ImmutableBitSet groupKey)
Computes the population size for a set of keys returned from a join
|
static double |
getSelectivityValue(RexNode artificialSelecFuncNode)
Returns the selectivity value stored in the rexnode
|
static double |
guessSelectivity(RexNode predicate)
Returns default estimates for selectivities, in the absence of stats.
|
static double |
guessSelectivity(RexNode predicate,
boolean artificialOnly)
Returns default estimates for selectivities, in the absence of stats.
|
static RexNode |
makeSemiJoinSelectivityRexNode(SemiJoin rel)
Creates a RexNode that stores a selectivity value corresponding to the
selectivity of a semijoin.
|
static RexNode |
minusPreds(RexBuilder rexBuilder,
RexNode pred1,
RexNode pred2)
Takes the difference between two predicates, removing from the first any
predicates also in the second
|
static Double |
numDistinctVals(Double domainSize,
Double numSelected)
Returns the number of distinct values provided numSelected are selected
where there are domainSize distinct values.
|
static void |
setAggChildKeys(ImmutableBitSet groupKey,
Aggregate aggRel,
ImmutableBitSet.Builder childKey)
Takes a bitmap representing a set of input references and extracts the
ones that reference the group by columns in an aggregate.
|
static void |
setLeftRightBitmaps(ImmutableBitSet groupKey,
ImmutableBitSet.Builder leftMask,
ImmutableBitSet.Builder rightMask,
int nFieldsOnLeft)
Separates a bit-mask representing a join into masks representing the left
and right inputs into the join.
|
static void |
splitCols(List<RexNode> projExprs,
ImmutableBitSet groupKey,
ImmutableBitSet.Builder baseCols,
ImmutableBitSet.Builder projCols)
Forms two bitmaps by splitting the columns in a bitmap according to
whether or not the column references the child input or is an expression
|
static RexNode |
unionPreds(RexBuilder rexBuilder,
RexNode pred1,
RexNode pred2)
AND's two predicates together, either of which may be null, removing
redundant filters.
|
public static final SqlFunction ARTIFICIAL_SELECTIVITY_FUNC
public static RexNode makeSemiJoinSelectivityRexNode(SemiJoin rel)
rel - the semijoin of interestpublic static double getSelectivityValue(RexNode artificialSelecFuncNode)
artificialSelecFuncNode - rexnode containing the selectivity valuepublic static double computeSemiJoinSelectivity(SemiJoin rel)
rel - semijoin relpublic static double computeSemiJoinSelectivity(RelNode factRel, RelNode dimRel, SemiJoin rel)
factRel - fact table participating in the semijoindimRel - dimension table participating in the semijoinrel - semijoin relpublic static double computeSemiJoinSelectivity(RelNode factRel, RelNode dimRel, List<Integer> factKeyList, List<Integer> dimKeyList)
factRel - fact table participating in the semijoindimRel - dimension table participating in the semijoinfactKeyList - LHS keys used in the filterdimKeyList - RHS keys used in the filterpublic static boolean areColumnsDefinitelyUnique(RelNode rel, ImmutableBitSet colMask)
rel - the relational expression that the column mask corresponds
tocolMask - bit mask containing columns that will be tested for
uniquenesspublic static Boolean areColumnsUnique(RelNode rel, List<RexInputRef> columnRefs)
public static boolean areColumnsDefinitelyUnique(RelNode rel, List<RexInputRef> columnRefs)
public static boolean areColumnsDefinitelyUniqueWhenNullsFiltered(RelNode rel, ImmutableBitSet colMask)
rel - the relational expression that the column mask corresponds
tocolMask - bit mask containing columns that will be tested for
uniquenesspublic static Boolean areColumnsUniqueWhenNullsFiltered(RelNode rel, List<RexInputRef> columnRefs)
public static boolean areColumnsDefinitelyUniqueWhenNullsFiltered(RelNode rel, List<RexInputRef> columnRefs)
public static void setLeftRightBitmaps(ImmutableBitSet groupKey, ImmutableBitSet.Builder leftMask, ImmutableBitSet.Builder rightMask, int nFieldsOnLeft)
groupKey - original bit-maskleftMask - left bit-mask to be setrightMask - right bit-mask to be setnFieldsOnLeft - number of fields in the left inputpublic static Double numDistinctVals(Double domainSize, Double numSelected)
Note that in the case where domainSize == numSelected, it's not true that the return value should be domainSize. If you pick 100 random values between 1 and 100, you'll most likely end up with fewer than 100 distinct values, because you'll pick some values more than once.
domainSize - number of distinct values in the domainnumSelected - number selected from the domainpublic static double capInfinity(Double d)
d - the Double objectpublic static double guessSelectivity(RexNode predicate)
predicate - predicate for which selectivity will be computed; null
means true, so gives selectity of 1.0public static double guessSelectivity(RexNode predicate, boolean artificialOnly)
predicate - predicate for which selectivity will be computed;
null means true, so gives selectity of 1.0artificialOnly - return only the selectivity contribution from
artificial nodespublic static RexNode unionPreds(RexBuilder rexBuilder, RexNode pred1, RexNode pred2)
rexBuilder - rexBuilder used to construct AND'd RexNodepred1 - first predicatepred2 - second predicatepublic static RexNode minusPreds(RexBuilder rexBuilder, RexNode pred1, RexNode pred2)
rexBuilder - rexBuilder used to construct AND'd RexNodepred1 - first predicatepred2 - second predicatepublic static void setAggChildKeys(ImmutableBitSet groupKey, Aggregate aggRel, ImmutableBitSet.Builder childKey)
groupKey - the original bitmapaggRel - the aggregatechildKey - sets bits from groupKey corresponding to group by columnspublic static void splitCols(List<RexNode> projExprs, ImmutableBitSet groupKey, ImmutableBitSet.Builder baseCols, ImmutableBitSet.Builder projCols)
projExprs - Project expressionsgroupKey - Bitmap whose columns will be splitbaseCols - Bitmap representing columns from the child inputprojCols - Bitmap representing non-child columnspublic static Double cardOfProjExpr(Project rel, RexNode expr)
rel - RelNode corresponding to the projectexpr - projection expressionpublic static Double getJoinPopulationSize(RelNode joinRel, ImmutableBitSet groupKey)
joinRel - the join relgroupKey - keys to compute the population forpublic static Double getJoinDistinctRowCount(RelNode joinRel, JoinRelType joinType, ImmutableBitSet groupKey, RexNode predicate, boolean useMaxNdv)
joinRel - RelNode representing the joinjoinType - type of joingroupKey - keys that the distinct row count will be computed forpredicate - join predicateuseMaxNdv - If true use formula max(left NDV, right NDV),
otherwise use left NDV * right NDV.Copyright © 2012–2015 The Apache Software Foundation. All rights reserved.