diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java index 47f8027f8b..4d45aa05bc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java @@ -35,6 +35,7 @@ import org.apache.doris.planner.HashJoinNode.DistributionMode; import org.apache.doris.planner.JoinNodeBase; import org.apache.doris.planner.RuntimeFilter.RuntimeFilterTarget; import org.apache.doris.planner.ScanNode; +import org.apache.doris.qe.ConnectContext; import org.apache.doris.thrift.TRuntimeFilterType; import com.google.common.collect.ImmutableList; @@ -149,6 +150,12 @@ public class RuntimeFilterTranslator { origFilter.markFinalized(); origFilter.assignToPlanNodes(); origFilter.extractTargetsPosition(); + // Number of parallel instances are large for pipeline engine, so we prefer bloom filter. + if (!origFilter.hasRemoteTargets() && origFilter.getType() == TRuntimeFilterType.IN_OR_BLOOM + && ConnectContext.get() != null + && ConnectContext.get().getSessionVariable().enablePipelineEngine()) { + origFilter.setType(TRuntimeFilterType.BLOOM); + } return origFilter; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java index 7da0f94afa..23a67233a3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilterGenerator.java @@ -190,6 +190,12 @@ public final class RuntimeFilterGenerator { int numBloomFilters = 0; for (RuntimeFilter filter : filters) { filter.extractTargetsPosition(); + // Number of parallel instances are large for pipeline engine, so we prefer bloom filter. + if (!filter.hasRemoteTargets() && filter.getType() == TRuntimeFilterType.IN_OR_BLOOM + && ConnectContext.get() != null + && ConnectContext.get().getSessionVariable().enablePipelineEngine()) { + filter.setType(TRuntimeFilterType.BLOOM); + } if (filter.getType() == TRuntimeFilterType.BLOOM) { if (numBloomFilters >= maxNumBloomFilters) { continue;