branch-2.1: [opt](nereids) skip run PruneOlapScanTablet when exists lots of InPredicate (#49387)

cherry pick some parts from #47608 and #49386
This commit is contained in:
924060929
2025-03-28 11:51:20 +08:00
committed by GitHub
parent 7d64a80959
commit cf1938dd59
2 changed files with 8 additions and 1 deletions

View File

@ -21,6 +21,7 @@ import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.LiteralExpr;
import org.apache.doris.analysis.NullLiteral;
import org.apache.doris.analysis.SlotRef;
import org.apache.doris.common.Config;
import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
import org.apache.doris.nereids.trees.expressions.EqualTo;
import org.apache.doris.nereids.trees.expressions.Expression;
@ -99,6 +100,10 @@ public class ExpressionColumnFilterConverter
@Override
public Expression visitInPredicate(InPredicate predicate, Void unused) {
if (predicate.getOptions().size() > Config.max_distribution_pruner_recursion_depth) {
return null;
}
List<Expr> literals = predicate.getOptions().stream()
.map(expr -> ((Expr) ((Literal) expr).toLegacyLiteral()))
.collect(Collectors.toList());

View File

@ -18,6 +18,7 @@
package org.apache.doris.nereids.util;
import org.apache.doris.catalog.TableIf.TableType;
import org.apache.doris.common.Config;
import org.apache.doris.common.MaterializedViewException;
import org.apache.doris.common.NereidsException;
import org.apache.doris.common.Pair;
@ -807,7 +808,8 @@ public class ExpressionUtils {
}
if (expression instanceof InPredicate) {
InPredicate predicate = ((InPredicate) expression);
if (!predicate.getCompareExpr().isSlot()) {
if (!predicate.getCompareExpr().isSlot()
|| predicate.getOptions().size() > Config.max_distribution_pruner_recursion_depth) {
return Optional.empty();
}
return Optional.ofNullable(predicate.getOptions().stream()