Search in sources :

Example 1 with OrderedRel

use of org.apache.drill.exec.planner.common.OrderedRel in project drill by apache.

the class AbstractIndexPlanGenerator method getSortNode.

public static RelNode getSortNode(IndexCallContext indexContext, RelNode newRel, boolean donotGenerateSort, boolean isSingleton, boolean isExchangeRequired) {
    OrderedRel rel = indexContext.getSort();
    DrillDistributionTrait hashDistribution = new DrillDistributionTrait(DrillDistributionTrait.DistributionType.HASH_DISTRIBUTED, ImmutableList.copyOf(indexContext.getDistributionFields()));
    if (toRemoveSort(indexContext.getCollation(), newRel.getTraitSet().getTrait(RelCollationTraitDef.INSTANCE))) {
        // we are going to remove sort
        logger.debug("Not generating SortPrel since we have the required collation");
        if (IndexPlanUtils.generateLimit(rel)) {
            newRel = new LimitPrel(newRel.getCluster(), newRel.getTraitSet().plus(indexContext.getCollation()).plus(Prel.DRILL_PHYSICAL), newRel, IndexPlanUtils.getOffset(rel), IndexPlanUtils.getFetch(rel));
        }
        RelTraitSet traits = newRel.getTraitSet().plus(indexContext.getCollation()).plus(Prel.DRILL_PHYSICAL);
        newRel = Prule.convert(newRel, traits);
        newRel = getExchange(newRel.getCluster(), isSingleton, isExchangeRequired, traits, hashDistribution, indexContext, newRel);
    } else {
        if (donotGenerateSort) {
            logger.debug("Not generating SortPrel and index plan, since just picking index for full index scan is not beneficial.");
            return null;
        }
        RelTraitSet traits = newRel.getTraitSet().plus(indexContext.getCollation()).plus(Prel.DRILL_PHYSICAL);
        newRel = getSortOrTopN(indexContext, rel, newRel, Prule.convert(newRel, newRel.getTraitSet().replace(Prel.DRILL_PHYSICAL)));
        newRel = getExchange(newRel.getCluster(), isSingleton, isExchangeRequired, traits, hashDistribution, indexContext, newRel);
    }
    return newRel;
}
Also used : OrderedRel(org.apache.drill.exec.planner.common.OrderedRel) RelTraitSet(org.apache.calcite.plan.RelTraitSet) LimitPrel(org.apache.drill.exec.planner.physical.LimitPrel) DrillDistributionTrait(org.apache.drill.exec.planner.physical.DrillDistributionTrait)

Aggregations

RelTraitSet (org.apache.calcite.plan.RelTraitSet)1 OrderedRel (org.apache.drill.exec.planner.common.OrderedRel)1 DrillDistributionTrait (org.apache.drill.exec.planner.physical.DrillDistributionTrait)1 LimitPrel (org.apache.drill.exec.planner.physical.LimitPrel)1