@Override public Optional<PlanNodeStatsEstimate> calculate(SemiJoinNode node, StatsProvider statsProvider, Lookup lookup, Session session, TypeProvider types) { PlanNodeStatsEstimate sourceStats = statsProvider.getStats(node.getSource()); // For now we just propagate statistics for source symbols. // Handling semiJoinOutput symbols requires support for correlation for boolean columns. return Optional.of(sourceStats); } }
@Override public Void visitSemiJoin(SemiJoinNode node, Void context) { printNode(node, "SemiJoin", format("%s = %s", node.getSourceJoinSymbol(), node.getFilteringSourceJoinSymbol()), NODE_COLORS.get(NodeType.JOIN)); node.getSource().accept(this, context); node.getFilteringSource().accept(this, context); return null; }
@Override public Void visitSemiJoin(SemiJoinNode node, Void context) { printNode(node, "SemiJoin", format("%s = %s", node.getSourceJoinSymbol(), node.getFilteringSourceJoinSymbol()), NODE_COLORS.get(NodeType.JOIN)); node.getSource().accept(this, context); node.getFilteringSource().accept(this, context); return null; }
@Override public Expression visitSemiJoin(SemiJoinNode node, Void context) { // Filtering source does not change the effective predicate over the output symbols return node.getSource().accept(this, context); }
@Override public Optional<PlanNodeStatsEstimate> calculate(SemiJoinNode node, StatsProvider statsProvider, Lookup lookup, Session session, TypeProvider types) { PlanNodeStatsEstimate sourceStats = statsProvider.getStats(node.getSource()); // For now we just propagate statistics for source symbols. // Handling semiJoinOutput symbols requires support for correlation for boolean columns. return Optional.of(sourceStats); } }
@Override public Expression visitSemiJoin(SemiJoinNode node, Void context) { // Filtering source does not change the effective predicate over the output symbols return node.getSource().accept(this, context); }
@Override public Map<PlanNodeId, SplitSource> visitSemiJoin(SemiJoinNode node, Void context) { Map<PlanNodeId, SplitSource> sourceSplits = node.getSource().accept(this, context); Map<PlanNodeId, SplitSource> filteringSourceSplits = node.getFilteringSource().accept(this, context); return ImmutableMap.<PlanNodeId, SplitSource>builder() .putAll(sourceSplits) .putAll(filteringSourceSplits) .build(); }
@Override public Map<PlanNodeId, SplitSource> visitSemiJoin(SemiJoinNode node, Void context) { Map<PlanNodeId, SplitSource> sourceSplits = node.getSource().accept(this, context); Map<PlanNodeId, SplitSource> filteringSourceSplits = node.getFilteringSource().accept(this, context); return ImmutableMap.<PlanNodeId, SplitSource>builder() .putAll(sourceSplits) .putAll(filteringSourceSplits) .build(); }
@Override public Set<PlanFragmentId> visitSemiJoin(SemiJoinNode node, PlanFragmentId currentFragmentId) { return processJoin(node.getFilteringSource(), node.getSource(), currentFragmentId); }
@Override public Set<PlanFragmentId> visitSemiJoin(SemiJoinNode node, PlanFragmentId currentFragmentId) { return processJoin(node.getFilteringSource(), node.getSource(), currentFragmentId); }
@Override public PlanNodeCostEstimate visitSemiJoin(SemiJoinNode node, Void context) { return calculateJoinExchangeCost( node.getSource(), node.getFilteringSource(), stats, types, Objects.equals(node.getDistributionType(), Optional.of(SemiJoinNode.DistributionType.REPLICATED)), taskCountEstimator.estimateSourceDistributedTaskCount()); }
@Override public PlanNodeCostEstimate visitSemiJoin(SemiJoinNode node, Void context) { return calculateJoinExchangeCost( node.getSource(), node.getFilteringSource(), stats, types, Objects.equals(node.getDistributionType(), Optional.of(SemiJoinNode.DistributionType.REPLICATED)), taskCountEstimator.estimateSourceDistributedTaskCount()); }
@Override public Void visitSemiJoin(SemiJoinNode node, Consumer<PlanNodeId> schedulingOrder) { node.getFilteringSource().accept(this, schedulingOrder); node.getSource().accept(this, schedulingOrder); return null; }
@Override public PlanNodeCostEstimate visitSemiJoin(SemiJoinNode node, Void context) { return calculateJoinCost( node, node.getSource(), node.getFilteringSource(), node.getDistributionType().orElse(SemiJoinNode.DistributionType.PARTITIONED).equals(SemiJoinNode.DistributionType.REPLICATED)); }
@Override public Void visitSemiJoin(SemiJoinNode node, Void context) { node.getFilteringSource().accept(this, context); node.getSource().accept(this, context); return null; }
@Override public Void visitSemiJoin(SemiJoinNode node, Void context) { node.getFilteringSource().accept(this, context); node.getSource().accept(this, context); return null; }
@Override public Void visitSemiJoin(SemiJoinNode node, Consumer<PlanNodeId> schedulingOrder) { node.getFilteringSource().accept(this, schedulingOrder); node.getSource().accept(this, schedulingOrder); return null; }
@Override public PlanNodeCostEstimate visitSemiJoin(SemiJoinNode node, Void context) { return calculateJoinCost( node, node.getSource(), node.getFilteringSource(), node.getDistributionType().orElse(SemiJoinNode.DistributionType.PARTITIONED).equals(SemiJoinNode.DistributionType.REPLICATED)); }
@Override public PlanWithProperties visitSemiJoin(SemiJoinNode node, StreamPreferredProperties parentPreferences) { PlanWithProperties source = planAndEnforce( node.getSource(), defaultParallelism(session), parentPreferences.constrainTo(node.getSource().getOutputSymbols()).withDefaultParallelism(session)); // this filter source consumes the input completely, so we do not pass through parent preferences PlanWithProperties filteringSource = planAndEnforce(node.getFilteringSource(), singleStream(), singleStream()); return rebaseAndDeriveProperties(node, ImmutableList.of(source, filteringSource)); }
@Override public PlanWithProperties visitSemiJoin(SemiJoinNode node, StreamPreferredProperties parentPreferences) { PlanWithProperties source = planAndEnforce( node.getSource(), defaultParallelism(session), parentPreferences.constrainTo(node.getSource().getOutputSymbols()).withDefaultParallelism(session)); // this filter source consumes the input completely, so we do not pass through parent preferences PlanWithProperties filteringSource = planAndEnforce(node.getFilteringSource(), singleStream(), singleStream()); return rebaseAndDeriveProperties(node, ImmutableList.of(source, filteringSource)); }