public static RelTraitSet getDefaultTraitSet(RelOptCluster cluster, RelTraitSet traitsFromInput) { return RelTraitSet.createEmpty().merge(traitsFromInput).merge(getDefaultTraitSet(cluster)); } }
public static RelTraitSet getDefaultTraitSet(RelOptCluster cluster, RelTraitSet traitsFromInput) { return RelTraitSet.createEmpty().merge(traitsFromInput).merge(getDefaultTraitSet(cluster)); } }
/** * Creates a HiveSortExchange. * * @param input Input relational expression * @param distribution Distribution specification * @param collation Collation specification * @param joinKeys Join Keys specification */ public static HiveSortExchange create(RelNode input, RelDistribution distribution, RelCollation collation, ImmutableList<RexNode> joinKeys) { RelOptCluster cluster = input.getCluster(); distribution = RelDistributionTraitDef.INSTANCE.canonize(distribution); collation = RelCollationTraitDef.INSTANCE.canonize(collation); RelTraitSet traitSet = RelTraitSet.createEmpty().plus(distribution).plus(collation); return new HiveSortExchange(cluster, traitSet, input, distribution, collation, joinKeys); }
/** * Creates a HiveSortExchange. * * @param input Input relational expression * @param distribution Distribution specification * @param collation Collation specification * @param joinKeys Join Keys specification */ public static HiveSortExchange create(RelNode input, RelDistribution distribution, RelCollation collation, ImmutableList<RexNode> joinKeys) { RelOptCluster cluster = input.getCluster(); distribution = RelDistributionTraitDef.INSTANCE.canonize(distribution); collation = RelCollationTraitDef.INSTANCE.canonize(collation); RelTraitSet traitSet = RelTraitSet.createEmpty().plus(distribution).plus(collation); return new HiveSortExchange(cluster, traitSet, input, distribution, collation, joinKeys); }
public RelTraitSet emptyTraitSet() { return RelTraitSet.createEmpty(); }
public RelTraitSet emptyTraitSet() { return RelTraitSet.createEmpty(); }
public RelTraitSet getLogicalTraits(){ RelTraitSet set = RelTraitSet.createEmpty(); set.add(Rel.LOGICAL); return set; }
public RelTraitSet getLogicalTraits(){ RelTraitSet set = RelTraitSet.createEmpty(); set.add(DrillRel.DRILL_LOGICAL); return set; }
@Override public RelTraitSet emptyTraitSet() { return RelTraitSet.createEmpty().plus(Convention.NONE).plus(DistributionTrait.DEFAULT).plus(RelCollations.EMPTY); }
@Override public Prel prepareForLateralUnnestPipeline(List<RelNode> children) { List<RelFieldCollation> relFieldCollations = Lists.newArrayList(); relFieldCollations.add(new RelFieldCollation(0, RelFieldCollation.Direction.ASCENDING, RelFieldCollation.NullDirection.FIRST)); for (RelFieldCollation fieldCollation : this.collation.getFieldCollations()) { relFieldCollations.add(new RelFieldCollation(fieldCollation.getFieldIndex() + 1, fieldCollation.direction, fieldCollation.nullDirection)); } RelCollation collationTrait = RelCollationImpl.of(relFieldCollations); RelTraitSet traits = RelTraitSet.createEmpty() .replace(this.getTraitSet().getTrait(DrillDistributionTraitDef.INSTANCE)) .replace(collationTrait) .replace(DRILL_PHYSICAL); return this.copy(traits, children.get(0), collationTrait, this.offset, this.fetch); }
/** * Creates a HiveSortExchange. * * @param input Input relational expression * @param distribution Distribution specification * @param collation Collation specification * @param joinKeys Join Keys specification */ public static HiveSortExchange create(RelNode input, RelDistribution distribution, RelCollation collation, ImmutableList<RexNode> joinKeys) { RelOptCluster cluster = input.getCluster(); distribution = RelDistributionTraitDef.INSTANCE.canonize(distribution); collation = RelCollationTraitDef.INSTANCE.canonize(collation); RelTraitSet traitSet = RelTraitSet.createEmpty().plus(distribution).plus(collation); return new HiveSortExchange(cluster, traitSet, input, distribution, collation, joinKeys); }
@Override public Prel prepareForLateralUnnestPipeline(List<RelNode> children) { List<RelFieldCollation> relFieldCollations = Lists.newArrayList(); relFieldCollations.add(new RelFieldCollation(0, RelFieldCollation.Direction.ASCENDING, RelFieldCollation.NullDirection.FIRST)); for (RelFieldCollation fieldCollation : this.collation.getFieldCollations()) { relFieldCollations.add(new RelFieldCollation(fieldCollation.getFieldIndex() + 1, fieldCollation.direction, fieldCollation.nullDirection)); } RelCollation collationTrait = RelCollationImpl.of(relFieldCollations); RelTraitSet traits = RelTraitSet.createEmpty() .replace(this.getTraitSet().getTrait(DrillDistributionTraitDef.INSTANCE)) .replace(collationTrait) .replace(DRILL_PHYSICAL); return transformTopNToSortAndLimit(children, traits, collationTrait); }
@Test public void testRelDistributionSatisfy() { RelDistribution distribution1 = RelDistributions.hash(ImmutableList.of(0)); RelDistribution distribution2 = RelDistributions.hash(ImmutableList.of(1)); RelTraitSet traitSet = RelTraitSet.createEmpty(); RelTraitSet simpleTrait1 = traitSet.plus(distribution1); RelTraitSet simpleTrait2 = traitSet.plus(distribution2); RelTraitSet compositeTrait = traitSet.replace(RelDistributionTraitDef.INSTANCE, ImmutableList.of(distribution1, distribution2)); assertThat(compositeTrait.satisfies(simpleTrait1), is(true)); assertThat(compositeTrait.satisfies(simpleTrait2), is(true)); assertThat(distribution1.compareTo(distribution2), is(-1)); assertThat(distribution2.compareTo(distribution1), is(1)); //noinspection EqualsWithItself assertThat(distribution2.compareTo(distribution2), is(0)); } }
@Test public void testRelDistributionSatisfy() { RelDistribution distribution1 = RelDistributions.hash(ImmutableList.of(0)); RelDistribution distribution2 = RelDistributions.hash(ImmutableList.of(1)); RelTraitSet traitSet = RelTraitSet.createEmpty(); RelTraitSet simpleTrait1 = traitSet.plus(distribution1); RelTraitSet simpleTrait2 = traitSet.plus(distribution2); RelTraitSet compositeTrait = traitSet.replace(RelDistributionTraitDef.INSTANCE, ImmutableList.of(distribution1, distribution2)); assertThat(compositeTrait.satisfies(simpleTrait1), is(true)); assertThat(compositeTrait.satisfies(simpleTrait2), is(true)); assertThat(distribution1.compareTo(distribution2), is(-1)); assertThat(distribution2.compareTo(distribution1), is(1)); //noinspection EqualsWithItself assertThat(distribution2.compareTo(distribution2), is(0)); } }
@Override public void onMatch(RelOptRuleCall call) { final DrillSortRel sort = call.rel(0); final RelNode input = sort.getInput(); // Keep the collation in logical sort. Convert input into a RelNode with 1) this collation, 2) Physical, 3) hash distributed on DrillDistributionTrait hashDistribution = new DrillDistributionTrait(DrillDistributionTrait.DistributionType.HASH_DISTRIBUTED, ImmutableList.copyOf(getDistributionField(sort))); final RelTraitSet traits = RelTraitSet.createEmpty().plus(Prel.DRILL_PHYSICAL).plus(hashDistribution); SortPrel child = new SortPrel(sort.getCluster(), traits.plus(sort.getCollation()), convert(sort.getInput(), traits), sort.getCollation(), false); if(isSingleMode(call)){ call.transformTo(child); }else{ RelNode exch = new SingleMergeExchangePrel(sort.getCluster(), sort.getTraitSet().plus(Prel.DRILL_PHYSICAL).plus(DrillDistributionTrait.SINGLETON), child, sort.getCollation()); call.transformTo(exch); // transform logical "sort" into "SingleMergeExchange". } }