-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feature](nereids) extend infer predicates #41731
[feature](nereids) extend infer predicates #41731
Conversation
Thank you for your contribution to Apache Doris. Since 2024-03-18, the Document has been moved to doris-website. |
run buildall |
TPC-H: Total hot run time: 40780 ms
|
TPC-DS: Total hot run time: 191738 ms
|
ClickBench: Total hot run time: 32.84 s
|
run p0 |
run cloud_p0 |
18a0ac7
to
2cce1c5
Compare
run buildall |
TPC-H: Total hot run time: 40535 ms
|
run p0 |
TPC-DS: Total hot run time: 191755 ms
|
ClickBench: Total hot run time: 33.09 s
|
|
||
@Override | ||
public ImmutableSet<Expression> visit(Plan plan, Void context) { | ||
if (plan.arity() == 1) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why not remain this and avoid override too many plan visitor whose pullup is disabled?
64c558c
to
9588dc0
Compare
run buildall |
TPC-H: Total hot run time: 40725 ms
|
TPC-DS: Total hot run time: 191611 ms
|
ClickBench: Total hot run time: 32.98 s
|
} | ||
case LEFT_OUTER_JOIN: | ||
case LEFT_SEMI_JOIN: | ||
case LEFT_ANTI_JOIN: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why anti join's predicate can be pulled up?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
e.g. select t1.a from test_like1 t1 left anti join test_like2 t2 on t1.a=t2.a where t1.a<10 , t1.a<10 can be pulled up, because all rows that left anti join outputs, t1.a<10 is satisfied.
9588dc0
to
35ee0fd
Compare
run buildall |
PR approved by anyone and no changes requested. |
TPC-H: Total hot run time: 40693 ms
|
TPC-DS: Total hot run time: 191922 ms
|
ClickBench: Total hot run time: 32.11 s
|
[feature](nereids) add unequal predicates infer [feature](nereids) add unequal predicates infer [feature](nereids) add unequal predicates infer normalize unequal infer predicate 5>a to a<5 add regression res [feature](nereids) add unequal predicates infer [Feature](nereids) extend derivation of equivalence predicate [Feature](nereids) extend derivation of equivalence predicate [Feature](nereids) extend derivation of equivalence predicate literal should not be targetExpr and produce new predicate delete useless code delete useless code [Feature](nereids) extend derivation of equivalence predicate fix a=1 b=1 a=2 deduce to a=b [Feature](nereids) extend derivation of equivalence predicate [Feature](nereids) extend derivation of equivalence predicate [Feature](nereids) extend derivation of equivalence predicate [Feature](nereids) extend derivation of equivalence predicate add feut only support slot equalTo infer, remove the expr equalTo infer support fix feut change the logic of pull up predicate from join, and support a=1 b=1 infer a=b not infer same table predicates revert 'change the logic of pull up predicate from join, and support a=1 b=1 infer a=b' sort the equal set, and infer a=b a=c to b=c in order merge equal and unequal predicate infer fix feut prepare stmt not infer predicates support cast to unequal predicates fix regression fix regression do some print in regression use this function mv_rewrite_success_without_check_chosen in regression fix regression change hashset to linkedhashset in predicate infer to make predicate order stable sort input exprs by tosql in unequal infer to fix result, generate equalTo in unequal infer and change pull up join predicates when throw error in replace predicate, skip it and add cast check for decimalv3, and add feut for unequal predicate infer infer all different table equal(t1.a=t2.a) infer all different table equal(t1.a=t2.b=t3.c), but not infer when equal with literal(t1.a=t2.b=t3.c=1) delete deduceTransitiveEquality in ReplacePredicates support literal slot equal pair in ReplacePredicate fix checkstyle add comment add regression add boolean getAllPredicates in PullUpPredicates, to avoid redundant predicates. keep the order of predicates fix regression revert merge filter change(will affect preparestmt), and forbid null literal in infer, add try catch in generate fitlers not take null literal when build equal set not generate all literal predicates simplify PredicateInferUtils.inferPredicate adjust feut fix feut remove useless code, add comment fix name expand_graph
…l operator pull up predicates, other is forbidden
35ee0fd
to
f19dfb2
Compare
run buildall |
TPC-H: Total hot run time: 40618 ms
|
TPC-DS: Total hot run time: 192102 ms
|
ClickBench: Total hot run time: 32.38 s
|
run p0 |
PR approved by at least one committer and no changes requested. |
This pr refactors the PredicatePropagation module and adds support for predicate deduction, including: Support for predicate deduction of like, not in, !=; Support for predicate deduction of abs(b)=1 for a=b and abs(a)=1; Support for transitive deduction of non-equivalent relations, for example, a>b b>1 leads to a>1. Deleted useless predicates. But still has something to do in predicate inference: support expr in infer predicate, e.g. abs(t1.c1)>abs(t2.c2) and abs(t1.c1)<1 need to add expr qualifier info, to determine whether abs(t1.c1) and abs(t2.c2) is from same table.
This pr refactors the PredicatePropagation module and adds support for predicate deduction, including: Support for predicate deduction of like, not in, !=; Support for predicate deduction of abs(b)=1 for a=b and abs(a)=1; Support for transitive deduction of non-equivalent relations, for example, a>b b>1 leads to a>1. Deleted useless predicates. But still has something to do in predicate inference: support expr in infer predicate, e.g. abs(t1.c1)>abs(t2.c2) and abs(t1.c1)<1 need to add expr qualifier info, to determine whether abs(t1.c1) and abs(t2.c2) is from same table.
This pr refactors the PredicatePropagation module and adds support for predicate deduction, including: Support for predicate deduction of like, not in, !=; Support for predicate deduction of abs(b)=1 for a=b and abs(a)=1; Support for transitive deduction of non-equivalent relations, for example, a>b b>1 leads to a>1. Deleted useless predicates. But still has something to do in predicate inference: support expr in infer predicate, e.g. abs(t1.c1)>abs(t2.c2) and abs(t1.c1)<1 need to add expr qualifier info, to determine whether abs(t1.c1) and abs(t2.c2) is from same table.
This pr refactors the PredicatePropagation module and adds support for predicate deduction, including:
Support for predicate deduction of like, not in, !=;
Support for predicate deduction of abs(b)=1 for a=b and abs(a)=1;
Support for transitive deduction of non-equivalent relations, for example, a>b b>1 leads to a>1.
Deleted useless predicates.
But still has something to do in predicate inference:
support expr in infer predicate, e.g. abs(t1.c1)>abs(t2.c2) and abs(t1.c1)<1
need to add expr qualifier info, to determine whether abs(t1.c1) and abs(t2.c2) is from same table.
tpcds 1000 total time
before pr:
689804 | 554230 | 550065 | 546197
after pr:
670477 | 551991 | 544594 | 542985
No performance degradation was observed