Interface RelBuilder.Config
- Enclosing class:
RelBuilder
It is immutable, and all fields are public.
Start with the DEFAULT
instance,
and call withXxx
methods to set its properties.
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptiondefault boolean
Whether to create an Aggregate even if we know that the input is already unique; default false.default int
bloat()
Controls whether to merge twoProject
operators when inlining expressions causes complexity to increase.default boolean
Whether to convert Correlate to Join if correlation variable is unused.default boolean
WhetherRelBuilder.aggregate(org.apache.calcite.tools.RelBuilder.GroupKey, org.apache.calcite.tools.RelBuilder.AggCall...)
should eliminate duplicate aggregate calls; default true.default boolean
Whether to ensure that relational operators always have at least one column.default boolean
WhetherRelBuilder.aggregate(org.apache.calcite.tools.RelBuilder.GroupKey, org.apache.calcite.tools.RelBuilder.AggCall...)
should prune unused input columns; default true.default boolean
Whether to push down join conditions; default false (butSqlToRelConverter.config()
by default sets this to true).default boolean
Whether to remove the distinct that in aggregate if we know that the input is already unique; default false.default boolean
simplify()
Whether to simplify expressions; default true.default boolean
Whether to simplify LIMIT 0 to an empty relation; default true.default boolean
Whether to simplifyUnion(Values, Values)
orUnion(Project(Values))
toValues
; default true.withAggregateUnique
(boolean aggregateUnique) SetsaggregateUnique()
.withBloat
(int bloat) Setsbloat()
.withConvertCorrelateToJoin
(boolean convertCorrelateToJoin) SetsconvertCorrelateToJoin()
.withDedupAggregateCalls
(boolean dedupAggregateCalls) SetsdedupAggregateCalls()
.withPreventEmptyFieldList
(boolean preventEmptyFieldList) SetspreventEmptyFieldList()
.withPruneInputOfAggregate
(boolean pruneInputOfAggregate) SetspruneInputOfAggregate()
.withPushJoinCondition
(boolean pushJoinCondition) SetspushJoinCondition()
.withRemoveRedundantDistinct
(boolean removeRedundantDistinct) withSimplify
(boolean simplify) Setssimplify()
.withSimplifyLimit
(boolean simplifyLimit) SetssimplifyLimit()
.withSimplifyValues
(boolean simplifyValues) SetssimplifyValues()
.
-
Field Details
-
DEFAULT
Default configuration.
-
-
Method Details
-
bloat
@Default default int bloat()Controls whether to merge twoProject
operators when inlining expressions causes complexity to increase.Usually merging projects is beneficial, but occasionally the result is more complex than the original projects. Consider:
P: Project(a+b+c AS x, d+e+f AS y, g+h+i AS z) # complexity 15 Q: Project(x*y*z AS p, x-y-z AS q) # complexity 10 R: Project((a+b+c)*(d+e+f)*(g+h+i) AS s, (a+b+c)-(d+e+f)-(g+h+i) AS t) # complexity 34
The complexity of an expression is the number of nodes (leaves and operators). For example,
a+b+c
has complexity 5 (3 field references and 2 calls):+ / \ + c / \ a b
A negative value never allows merges.
A zero or positive value,
bloat
, allows a merge if complexity of the result is less than or equal to the sum of the complexity of the originals plusbloat
.The default value, 100, allows a moderate increase in complexity but prevents cases where complexity would run away into the millions and run out of memory. Moderate complexity is OK; the implementation, say via
EnumerableCalc
, will often gather common sub-expressions and compute them only once. -
withBloat
Setsbloat()
. -
dedupAggregateCalls
@Default default boolean dedupAggregateCalls()WhetherRelBuilder.aggregate(org.apache.calcite.tools.RelBuilder.GroupKey, org.apache.calcite.tools.RelBuilder.AggCall...)
should eliminate duplicate aggregate calls; default true. -
withDedupAggregateCalls
SetsdedupAggregateCalls()
. -
pruneInputOfAggregate
@Default default boolean pruneInputOfAggregate()WhetherRelBuilder.aggregate(org.apache.calcite.tools.RelBuilder.GroupKey, org.apache.calcite.tools.RelBuilder.AggCall...)
should prune unused input columns; default true. -
withPruneInputOfAggregate
SetspruneInputOfAggregate()
. -
preventEmptyFieldList
@Default default boolean preventEmptyFieldList()Whether to ensure that relational operators always have at least one column. -
withPreventEmptyFieldList
SetspreventEmptyFieldList()
. -
pushJoinCondition
@Default default boolean pushJoinCondition()Whether to push down join conditions; default false (butSqlToRelConverter.config()
by default sets this to true). -
withPushJoinCondition
SetspushJoinCondition()
. -
simplify
@Default default boolean simplify()Whether to simplify expressions; default true. -
withSimplify
Setssimplify()
. -
simplifyLimit
@Default default boolean simplifyLimit()Whether to simplify LIMIT 0 to an empty relation; default true. -
withSimplifyLimit
SetssimplifyLimit()
. -
simplifyValues
@Default default boolean simplifyValues()Whether to simplifyUnion(Values, Values)
orUnion(Project(Values))
toValues
; default true. -
withSimplifyValues
SetssimplifyValues()
. -
aggregateUnique
@Default default boolean aggregateUnique()Whether to create an Aggregate even if we know that the input is already unique; default false. -
withAggregateUnique
SetsaggregateUnique()
. -
convertCorrelateToJoin
@Default default boolean convertCorrelateToJoin()Whether to convert Correlate to Join if correlation variable is unused. -
withConvertCorrelateToJoin
SetsconvertCorrelateToJoin()
. -
removeRedundantDistinct
@Default default boolean removeRedundantDistinct()Whether to remove the distinct that in aggregate if we know that the input is already unique; default false. -
withRemoveRedundantDistinct
-