Search in sources :

Example 11 with LogicalCorrelate

use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCorrelate in project calcite by apache.

the class RelStructuredTypeFlattener method rewriteRel.

public void rewriteRel(LogicalCorrelate rel) {
    ImmutableBitSet.Builder newPos = ImmutableBitSet.builder();
    for (int pos : rel.getRequiredColumns()) {
        RelDataType corrFieldType = rel.getLeft().getRowType().getFieldList().get(pos).getType();
        if (corrFieldType.isStruct()) {
            throw Util.needToImplement("correlation on structured type");
        }
        newPos.set(getNewForOldInput(pos));
    }
    LogicalCorrelate newRel = LogicalCorrelate.create(getNewForOldRel(rel.getLeft()), getNewForOldRel(rel.getRight()), rel.getCorrelationId(), newPos.build(), rel.getJoinType());
    setNewForOldRel(rel, newRel);
}
Also used : ImmutableBitSet(org.apache.calcite.util.ImmutableBitSet) RelDataType(org.apache.calcite.rel.type.RelDataType) LogicalCorrelate(org.apache.calcite.rel.logical.LogicalCorrelate)

Example 12 with LogicalCorrelate

use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCorrelate in project calcite by apache.

the class RelStructuredTypeFlattener method updateRelInMap.

public void updateRelInMap(SortedMap<CorrelationId, LogicalCorrelate> mapCorVarToCorRel) {
    for (CorrelationId corVar : mapCorVarToCorRel.keySet()) {
        LogicalCorrelate oldRel = mapCorVarToCorRel.get(corVar);
        if (oldToNewRelMap.containsKey(oldRel)) {
            RelNode newRel = oldToNewRelMap.get(oldRel);
            assert newRel instanceof LogicalCorrelate;
            mapCorVarToCorRel.put(corVar, (LogicalCorrelate) newRel);
        }
    }
}
Also used : RelNode(org.apache.calcite.rel.RelNode) CorrelationId(org.apache.calcite.rel.core.CorrelationId) LogicalCorrelate(org.apache.calcite.rel.logical.LogicalCorrelate)

Example 13 with LogicalCorrelate

use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCorrelate in project drill by apache.

the class DrillCorrelateRule method onMatch.

@Override
public void onMatch(RelOptRuleCall call) {
    final LogicalCorrelate correlate = call.rel(0);
    final RelNode left = correlate.getLeft();
    final RelNode right = correlate.getRight();
    final RelNode convertedLeft = convert(left, left.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify());
    final RelNode convertedRight = convert(right, right.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify());
    final RelTraitSet traits = correlate.getTraitSet().plus(DrillRel.DRILL_LOGICAL);
    DrillLateralJoinRel lateralJoinRel = new DrillLateralJoinRel(correlate.getCluster(), traits, convertedLeft, convertedRight, false, correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType());
    call.transformTo(lateralJoinRel);
}
Also used : RelNode(org.apache.calcite.rel.RelNode) LogicalCorrelate(org.apache.calcite.rel.logical.LogicalCorrelate) RelTraitSet(org.apache.calcite.plan.RelTraitSet)

Example 14 with LogicalCorrelate

use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCorrelate in project drill by apache.

the class ComplexUnnestVisitor method visit.

@Override
public RelNode visit(LogicalCorrelate correlate) {
    RelNode left = correlate.getLeft().accept(this);
    leftInputs.put(correlate.getCorrelationId(), left);
    RelNode right = correlate.getRight().accept(this);
    // after rewriting right input, no need to create Correlate with new CorrelationId
    if (correlate.getRight() == right || left == leftInputs.get(correlate.getCorrelationId())) {
        if (correlate.getLeft() == left) {
            return correlate;
        }
        // changed only inputs, but CorrelationId left the same
        return correlate.copy(correlate.getTraitSet(), Arrays.asList(left, right));
    }
    Correlate newCorrelate = correlate.copy(correlate.getTraitSet(), leftInputs.get(correlate.getCorrelationId()), right, updatedCorrelationIds.get(correlate.getCorrelationId()), ImmutableBitSet.of(left.getRowType().getFieldCount()), correlate.getJoinType());
    RelBuilder builder = DrillRelFactories.LOGICAL_BUILDER.create(correlate.getCluster(), null);
    builder.push(newCorrelate);
    List<RexNode> topProjectExpressions = left.getRowType().getFieldList().stream().map(field -> builder.getRexBuilder().makeInputRef(newCorrelate, field.getIndex())).collect(Collectors.toList());
    // Accommodate the new $COMPLEX_FIELD_NAME column.
    int rightStartIndex = left.getRowType().getFieldList().size() + 1;
    switch(correlate.getJoinType()) {
        case LEFT:
        case INNER:
            // adds field from the right input of correlate to the top project
            topProjectExpressions.addAll(right.getRowType().getFieldList().stream().map(field -> builder.getRexBuilder().makeInputRef(newCorrelate, field.getIndex() + rightStartIndex)).collect(Collectors.toList()));
        // fall through
        case ANTI:
        case SEMI:
            builder.project(topProjectExpressions, correlate.getRowType().getFieldNames());
    }
    return builder.build();
}
Also used : ImmutableBitSet(org.apache.calcite.util.ImmutableBitSet) Project(org.apache.calcite.rel.core.Project) Uncollect(org.apache.calcite.rel.core.Uncollect) RexFieldAccess(org.apache.calcite.rex.RexFieldAccess) Arrays(java.util.Arrays) SqlKind(org.apache.calcite.sql.SqlKind) RelShuttleImpl(org.apache.calcite.rel.RelShuttleImpl) Correlate(org.apache.calcite.rel.core.Correlate) RexBuilder(org.apache.calcite.rex.RexBuilder) HashMap(java.util.HashMap) RelNode(org.apache.calcite.rel.RelNode) RelOptUtil(org.apache.calcite.plan.RelOptUtil) Collectors(java.util.stream.Collectors) ImmutableList(org.apache.drill.shaded.guava.com.google.common.collect.ImmutableList) ArrayList(java.util.ArrayList) List(java.util.List) CorrelationId(org.apache.calcite.rel.core.CorrelationId) RexNode(org.apache.calcite.rex.RexNode) RelBuilder(org.apache.calcite.tools.RelBuilder) RelDataTypeField(org.apache.calcite.rel.type.RelDataTypeField) Map(java.util.Map) LogicalCorrelate(org.apache.calcite.rel.logical.LogicalCorrelate) DrillRelFactories(org.apache.drill.exec.planner.logical.DrillRelFactories) RexShuttle(org.apache.calcite.rex.RexShuttle) Correlate(org.apache.calcite.rel.core.Correlate) LogicalCorrelate(org.apache.calcite.rel.logical.LogicalCorrelate) RelBuilder(org.apache.calcite.tools.RelBuilder) RelNode(org.apache.calcite.rel.RelNode) RexNode(org.apache.calcite.rex.RexNode)

Aggregations

LogicalCorrelate (org.apache.calcite.rel.logical.LogicalCorrelate)12 RelNode (org.apache.calcite.rel.RelNode)9 CorrelationId (org.apache.calcite.rel.core.CorrelationId)6 ArrayList (java.util.ArrayList)4 RexNode (org.apache.calcite.rex.RexNode)4 HiveRelNode (org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveRelNode)4 Function2 (org.apache.calcite.linq4j.function.Function2)3 RelSubset (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.plan.volcano.RelSubset)2 RelNode (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.RelNode)2 LogicalCorrelate (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalCorrelate)2 LogicalProject (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rel.logical.LogicalProject)2 RexFieldAccess (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rex.RexFieldAccess)2 RexNode (org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.rex.RexNode)2 RelTraitSet (org.apache.calcite.plan.RelTraitSet)2 Join (org.apache.calcite.rel.core.Join)2 ImmutableBitSet (org.apache.calcite.util.ImmutableBitSet)2 HiveSemiJoin (org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSemiJoin)2 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 List (java.util.List)1