@Override public RelNode convert(RelNode rel) { LogicalAggregate agg = (LogicalAggregate) rel; // AVG() will be transformed into SUM()/COUNT() by AggregateReduceFunctionsRule. // Here only let the transformed plan pass. if (containsAvg(agg)) { return null; } RelTraitSet traitSet = agg.getTraitSet().replace(OLAPRel.CONVENTION); try { return new OLAPAggregateRel(agg.getCluster(), traitSet, convert(agg.getInput(), OLAPRel.CONVENTION), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { throw new IllegalStateException("Can't create OLAPAggregateRel!", e); } }
List<Pair<RexNode, String>> newProjects = new ArrayList<>(); Map<Integer, Integer> mapping = new HashMap<>(); for (int key : aggr.getGroupSet()) { mappingKeys(key, projects.get(key), newProjects, mapping); final ImmutableBitSet newGroupSet = aggr.getGroupSet().permute(mapping);
Iterator<Integer> groupSetIter = aggr.getGroupSet().iterator(); Iterator<RelDataTypeField> typeIterator = aggr.getRowType().getFieldList().iterator(); Iterator<Integer> groupKeyIter = groupSet.iterator();
if ((!singleAggregate.getGroupSet().isEmpty()) || (singleAggregate.getAggCallList().size() != 1) || !(singleAggregate.getAggCallList().get(0).getAggregation() if (!aggregate.getGroupSet().isEmpty()) { return;
public RelNode convert(RelNode rel) { final LogicalAggregate agg = (LogicalAggregate) rel; final RelTraitSet traitSet = agg.getTraitSet().replace(BindableConvention.INSTANCE); try { return new BindableAggregate(rel.getCluster(), traitSet, convert(agg.getInput(), traitSet), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { RelOptPlanner.LOGGER.debug(e.toString()); return null; } } }
final int oldGroupKeyCount = rel.getGroupSet().cardinality(); List<AggregateCall> oldAggCalls = rel.getAggCallList(); int oldInputOutputFieldCount = rel.getGroupSet().cardinality(); int newInputOutputFieldCount = newGroupSet.cardinality();
@Override public RelNode visit(LogicalAggregate aggregate) { final RelNode input = aggregate.getInput().accept(this); return new LogicalAggregate( cluster, copyOf(aggregate.getTraitSet()), input, aggregate.indicator, aggregate.getGroupSet(), aggregate.getGroupSets(), copyOf(aggregate.getAggCallList()) ); }
if (!aggregate.getGroupSet().isEmpty()) { return;
public RelNode convert(RelNode rel) { final LogicalAggregate agg = (LogicalAggregate) rel; final RelTraitSet traitSet = agg.getTraitSet().replace(BindableConvention.INSTANCE); try { return new BindableAggregate(rel.getCluster(), traitSet, convert(agg.getInput(), traitSet), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { RelOptPlanner.LOGGER.debug(e.toString()); return null; } } }
if (!aggregate.getGroupSet().isEmpty()) { return;
@Override public RelNode convert(RelNode rel) { LogicalAggregate agg = (LogicalAggregate) rel; // AVG() will be transformed into SUM()/COUNT() by AggregateReduceFunctionsRule. // Here only let the transformed plan pass. if (containsAvg(agg)) { return null; } RelTraitSet traitSet = agg.getTraitSet().replace(OLAPRel.CONVENTION); try { return new OLAPAggregateRel(agg.getCluster(), traitSet, convert(agg.getInput(), OLAPRel.CONVENTION), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { throw new IllegalStateException("Can't create OLAPAggregateRel!", e); } }
if ((!aggregate.getGroupSet().isEmpty()) || (aggregate.getAggCallList().size() != 1) || !(aggregate.getAggCallList().get(0).getAggregation()
public RelNode convert(RelNode rel) { final LogicalAggregate agg = (LogicalAggregate) rel; final RelTraitSet traitSet = agg.getTraitSet().replace(EnumerableConvention.INSTANCE); try { return new EnumerableAggregate( rel.getCluster(), traitSet, convert(agg.getInput(), EnumerableConvention.INSTANCE), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { EnumerableRules.LOGGER.debug(e.toString()); return null; } } }
@Override public RelNode visit(LogicalAggregate aggregate) { RelNode input = aggregate.getInput().accept(this); final RelBuilder relBuilder = newCalciteRelBuilderWithoutContext(aggregate.getCluster()); relBuilder.push(input); RelDataType incomingRowType = input.getRowType(); RelDataTypeField modField = incomingRowType.getField(UPDATE_COLUMN, false, false); ImmutableBitSet newGroupSet = aggregate.getGroupSet().rebuild().set(modField.getIndex()).build(); GroupKey groupKey = relBuilder.groupKey(newGroupSet, aggregate.indicator, null); relBuilder.aggregate(groupKey, aggregate.getAggCallList()); Iterable<RexInputRef> projects = FluentIterable.from(aggregate.getRowType().getFieldNames()) .transform(new Function<String, RexInputRef>() { @Override public RexInputRef apply(String fieldName) { return relBuilder.field(fieldName); } }) .append(relBuilder.field(UPDATE_COLUMN)); relBuilder.project(projects); return relBuilder.build(); }
public RelNode convert(RelNode rel) { final LogicalAggregate agg = (LogicalAggregate) rel; final RelTraitSet traitSet = agg.getTraitSet().replace(EnumerableConvention.INSTANCE); try { return new EnumerableAggregate( rel.getCluster(), traitSet, convert(agg.getInput(), EnumerableConvention.INSTANCE), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { EnumerableRules.LOGGER.debug(e.toString()); return null; } } }
public RelNode convert(RelNode rel) { final LogicalAggregate agg = (LogicalAggregate) rel; final RelTraitSet traitSet = agg.getTraitSet().replace(out); try { return new ElasticsearchAggregate( rel.getCluster(), traitSet, convert(agg.getInput(), traitSet.simplify()), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { return null; } } }
@Override public void onMatch(RelOptRuleCall call) { final LogicalAggregate aggregate = (LogicalAggregate) call.rel(0); final RelNode input = call.rel(1); if (aggregate.containsDistinctCall()) { // currently, don't use this rule if any of the aggregates contains DISTINCT return; } final RelTraitSet traits = aggregate.getTraitSet().plus(Rel.LOGICAL); final RelNode convertedInput = convert(input, input.getTraitSet().plus(Rel.LOGICAL).simplify()); call.transformTo(new AggregateRel(aggregate.getCluster(), traits, convertedInput, aggregate.indicator, aggregate.getGroupSet(), aggregate.getGroupSets(), aggregate.getAggCallList())); } }
@Override public void onMatch(RelOptRuleCall call) { final LogicalAggregate aggregate = call.rel(0); final RelNode input = call.rel(1); if (aggregate.containsDistinctCall()) { // currently, don't use this rule if any of the aggregates contains DISTINCT return; } final RelTraitSet traits = aggregate.getTraitSet().plus(DrillRel.DRILL_LOGICAL); final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify()); call.transformTo(new DrillAggregateRel(aggregate.getCluster(), traits, convertedInput, aggregate.indicator, aggregate.getGroupSet(), aggregate.getGroupSets(), aggregate.getAggCallList())); } }
public void onMatch(RelOptRuleCall call) { RelTraitSet empty = call.getPlanner().emptyTraitSet(); LogicalAggregate rel = call.rel(0); assert rel.getGroupSet().cardinality() == 1; int aggIndex = rel.getGroupSet().iterator().next(); RelTrait collation = RelCollations.of( new RelFieldCollation(aggIndex, RelFieldCollation.Direction.ASCENDING, RelFieldCollation.NullDirection.FIRST)); RelTraitSet desiredTraits = empty.replace(PHYSICAL).replace(collation); RelNode convertedInput = convert(rel.getInput(), desiredTraits); call.transformTo( new PhysAgg(rel.getCluster(), empty.replace(PHYSICAL), convertedInput, rel.indicator, rel.getGroupSet(), rel.getGroupSets(), rel.getAggCallList())); } }
public void onMatch(RelOptRuleCall call) { RelTraitSet empty = call.getPlanner().emptyTraitSet(); LogicalAggregate rel = call.rel(0); assert rel.getGroupSet().cardinality() == 1; int aggIndex = rel.getGroupSet().iterator().next(); RelTrait collation = RelCollations.of( new RelFieldCollation(aggIndex, RelFieldCollation.Direction.ASCENDING, RelFieldCollation.NullDirection.FIRST)); RelTraitSet desiredTraits = empty.replace(PHYSICAL).replace(collation); RelNode convertedInput = convert(rel.getInput(), desiredTraits); call.transformTo( new PhysAgg(rel.getCluster(), empty.replace(PHYSICAL), convertedInput, rel.indicator, rel.getGroupSet(), rel.getGroupSets(), rel.getAggCallList())); } }