LogicalJoin(type:left join, hashConjuncts:t1.a=t2.a)
+--Plan1(output:t1.a)
+--Plan2(output:t2.a)
->
LogicalUnion
+--LogicalFilter(t1.a is null)
+--Plan1
+--LogicalJoin(type:left join, t1.a=t2.a)
+--LogicalFilter(t1.a is not null)
+--Plan1
+--Plan2
Since there is sometimes null value skew on the join key, which can lead to prolonged execution times, the join is split into two parts based on whether the join key is null. This can accelerate the query.
Release note
None
Check List (For Author)
Test
[x] Regression test
[x] Unit Test
[ ] Manual test (add detailed scripts or steps below)
[ ] No need to test or manual test. Explain why:
[ ] This is a refactor/code format and no logic has been changed.
What problem does this PR solve?
LogicalJoin(type:left join, hashConjuncts:t1.a=t2.a) +--Plan1(output:t1.a) +--Plan2(output:t2.a) -> LogicalUnion +--LogicalFilter(t1.a is null) +--Plan1 +--LogicalJoin(type:left join, t1.a=t2.a) +--LogicalFilter(t1.a is not null) +--Plan1 +--Plan2
Since there is sometimes null value skew on the join key, which can lead to prolonged execution times, the join is split into two parts based on whether the join key is null. This can accelerate the query.
Release note
None
Check List (For Author)
Test
Behavior changed:
Does this need documentation?
Check List (For Reviewer who merge this PR)