本文整理汇总了Java中org.apache.calcite.rel.core.Aggregate.getGroupSet方法的典型用法代码示例。如果您正苦于以下问题:Java Aggregate.getGroupSet方法的具体用法?Java Aggregate.getGroupSet怎么用?Java Aggregate.getGroupSet使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.apache.calcite.rel.core.Aggregate
的用法示例。
在下文中一共展示了Aggregate.getGroupSet方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: getGroupByIndices
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
private String getGroupByIndices(Aggregate n) {
StringBuilder res = new StringBuilder();
int count = 0;
for (int i : n.getGroupSet()) {
if (++count > 1) {
res.append(", ");
}
res.append(i);
}
return res.toString();
}
示例2: mergeAggregate
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
private Aggregate mergeAggregate(Aggregate aggregate1, Aggregate aggregate2) {
//Support only simple groups
if (aggregate1.getGroupType() != Aggregate.Group.SIMPLE
|| aggregate2.getGroupType() != Aggregate.Group.SIMPLE) {
return null;
}
final int callLen1 = aggregate1.getAggCallList().size();
final int callLen2 = aggregate2.getAggCallList().size();
final List<AggregateCall> newAggCalls = Lists.newArrayList();
if (callLen1 <= callLen2) {
//Create new Call list
for (AggregateCall call : aggregate1.getAggCallList()) {
AggregateCall newAggCall = getMergedAggCall(aggregate2, call);
if (newAggCall == null) {
return null;
} else {
newAggCalls.add(newAggCall);
}
}
//Create new groupSets
ImmutableBitSet.Builder groupSetsBuilder = ImmutableBitSet.builder();
for (int key : aggregate1.getGroupSet()) {
try {
groupSetsBuilder.set(aggregate2.getGroupSet().nth(key));
} catch (IndexOutOfBoundsException e) {
return null;
}
}
final ImmutableBitSet newGroupSets = groupSetsBuilder.build();
return aggregate1.copy(aggregate1.getTraitSet(), aggregate2.getInput(),
aggregate1.indicator, newGroupSets, ImmutableList.of(newGroupSets), newAggCalls);
} else {
return null;
}
}
示例3: filterAggregateTranspose
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
/**
* Pushes a {@link org.apache.calcite.rel.core.Filter}
* past a {@link org.apache.calcite.rel.core.Aggregate}.
*/
RelNode filterAggregateTranspose(RelOptRuleCall call,
Filter filterRel,
Aggregate aggRel) {
final List<RexNode> conditions =
RelOptUtil.conjunctions(filterRel.getCondition());
final RexBuilder rexBuilder = filterRel.getCluster().getRexBuilder();
final List<RelDataTypeField> origFields =
aggRel.getRowType().getFieldList();
final int[] adjustments = new int[origFields.size()];
int i = 0;
for (int key : aggRel.getGroupSet()) {
adjustments[i] = key - i;
i++;
}
final List<RexNode> pushedConditions = Lists.newArrayList();
for (RexNode condition : conditions) {
ImmutableBitSet rCols = RelOptUtil.InputFinder.bits(condition);
if (canPush(aggRel, rCols)) {
pushedConditions.add(
condition.accept(
new RelOptUtil.RexInputConverter(rexBuilder, origFields,
aggRel.getInput(0).getRowType().getFieldList(),
adjustments)));
} else {
return null;
}
}
final RelBuilder builder = call.builder();
RelNode rel =
builder.push(aggRel.getInput()).filter(pushedConditions).build();
if (rel == aggRel.getInput(0)) {
return null;
}
rel = aggRel.copy(aggRel.getTraitSet(), ImmutableList.of(rel));
return rel;
}
示例4: visitAggregate
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
public Result visitAggregate(Aggregate e) {
// "select a, b, sum(x) from ( ... ) group by a, b"
final Result x = visitChild(0, e.getInput());
final Builder builder =
x.builder(e, Clause.GROUP_BY);
List<SqlNode> groupByList = Expressions.list();
final List<SqlNode> selectList = new ArrayList<>();
for (int group : e.getGroupSet()) {
final SqlNode field = builder.context.field(group);
addSelect(selectList, field, e.getRowType());
groupByList.add(field);
}
for (AggregateCall aggCall : e.getAggCallList()) {
SqlNode aggCallSqlNode = builder.context.toSql(aggCall);
if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) {
aggCallSqlNode =
rewriteSingleValueExpr(aggCallSqlNode, dialect);
}
addSelect(selectList, aggCallSqlNode, e.getRowType());
}
builder.setSelect(new SqlNodeList(selectList, POS));
if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) {
// Some databases don't support "GROUP BY ()". We can omit it as long
// as there is at least one aggregate function.
builder.setGroupBy(new SqlNodeList(groupByList, POS));
}
return builder.result();
}
示例5: averageColumnSizes
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
public List<Double> averageColumnSizes(Aggregate rel, RelMetadataQuery mq) {
final List<Double> inputColumnSizes =
mq.getAverageColumnSizesNotNull(rel.getInput());
final ImmutableList.Builder<Double> list = ImmutableList.builder();
for (int key : rel.getGroupSet()) {
list.add(inputColumnSizes.get(key));
}
for (AggregateCall aggregateCall : rel.getAggCallList()) {
list.add(averageTypeValueSize(aggregateCall.type));
}
return list.build();
}
示例6: getRowCount
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
public Double getRowCount(Aggregate rel, RelMetadataQuery mq) {
ImmutableBitSet groupKey = rel.getGroupSet(); // .range(rel.getGroupCount());
// rowCount is the cardinality of the group by columns
Double distinctRowCount =
mq.getDistinctRowCount(rel.getInput(), groupKey, null);
if (distinctRowCount == null) {
distinctRowCount = mq.getRowCount(rel.getInput()) / 10;
}
// Grouping sets multiply
distinctRowCount *= rel.getGroupSets().size();
return distinctRowCount;
}
示例7: getPredicates
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
/**
* Infers predicates for an Aggregate.
*
* <p>Pulls up predicates that only contains references to columns in the
* GroupSet. For e.g.
*
* <blockquote><pre>
* inputPullUpExprs : { a > 7, b + c < 10, a + e = 9}
* groupSet : { a, b}
* pulledUpExprs : { a > 7}
* </pre></blockquote>
*/
public RelOptPredicateList getPredicates(Aggregate agg, RelMetadataQuery mq) {
final RelNode input = agg.getInput();
final RexBuilder rexBuilder = agg.getCluster().getRexBuilder();
final RelOptPredicateList inputInfo = mq.getPulledUpPredicates(input);
final List<RexNode> aggPullUpPredicates = new ArrayList<>();
ImmutableBitSet groupKeys = agg.getGroupSet();
if (groupKeys.isEmpty()) {
// "GROUP BY ()" can convert an empty relation to a non-empty relation, so
// it is not valid to pull up predicates. In particular, consider the
// predicate "false": it is valid on all input rows (trivially - there are
// no rows!) but not on the output (there is one row).
return RelOptPredicateList.EMPTY;
}
Mapping m = Mappings.create(MappingType.PARTIAL_FUNCTION,
input.getRowType().getFieldCount(), agg.getRowType().getFieldCount());
int i = 0;
for (int j : groupKeys) {
m.set(j, i++);
}
for (RexNode r : inputInfo.pulledUpPredicates) {
ImmutableBitSet rCols = RelOptUtil.InputFinder.bits(r);
if (groupKeys.contains(rCols)) {
r = r.accept(new RexPermuteInputsShuttle(m, input));
aggPullUpPredicates.add(r);
}
}
return RelOptPredicateList.of(rexBuilder, aggPullUpPredicates);
}
示例8: visit
import org.apache.calcite.rel.core.Aggregate; //导入方法依赖的package包/类
/** @see #dispatch */
public Result visit(Aggregate e) {
// "select a, b, sum(x) from ( ... ) group by a, b"
final Result x = visitChild(0, e.getInput());
final Builder builder;
if (e.getInput() instanceof Project) {
builder = x.builder(e);
builder.clauses.add(Clause.GROUP_BY);
} else {
builder = x.builder(e, Clause.GROUP_BY);
}
List<SqlNode> groupByList = Expressions.list();
final List<SqlNode> selectList = new ArrayList<>();
for (int group : e.getGroupSet()) {
final SqlNode field = builder.context.field(group);
addSelect(selectList, field, e.getRowType());
groupByList.add(field);
}
for (AggregateCall aggCall : e.getAggCallList()) {
SqlNode aggCallSqlNode = builder.context.toSql(aggCall);
if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) {
aggCallSqlNode = dialect.
rewriteSingleValueExpr(aggCallSqlNode);
}
addSelect(selectList, aggCallSqlNode, e.getRowType());
}
builder.setSelect(new SqlNodeList(selectList, POS));
if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) {
// Some databases don't support "GROUP BY ()". We can omit it as long
// as there is at least one aggregate function.
builder.setGroupBy(new SqlNodeList(groupByList, POS));
}
return builder.result();
}