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:
@ -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());
|
||||
|
||||
@ -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()
|
||||
|
||||
Reference in New Issue
Block a user