Commit 4b87cfd
perf: Push down join key filters for LEFT/RIGHT/ANTI joins (apache#19918)
- Closes apache#19917.
Reduce the number of rows retrieved by pushing down more filters when
possible. Example:
```sql
create table t1 (k int, v int);
create table t2 (k int, v int);
-- k=1 is pushed to t1 and t2
explain select * from t1 left join t2 on t1.k = t2.k where t1.k = 1;
+---------------+------------------------------------------------------------+
| plan_type | plan |
+---------------+------------------------------------------------------------+
| physical_plan | ┌───────────────────────────┐ |
| | │ HashJoinExec │ |
| | │ -------------------- │ |
| | │ join_type: Left ├──────────────┐ |
| | │ on: (k = k) │ │ |
| | └─────────────┬─────────────┘ │ |
| | ┌─────────────┴─────────────┐┌─────────────┴─────────────┐ |
| | │ RepartitionExec ││ RepartitionExec │ |
| | │ -------------------- ││ -------------------- │ |
| | │ partition_count(in->out): ││ partition_count(in->out): │ |
| | │ 1 -> 12 ││ 1 -> 12 │ |
| | │ ││ │ |
| | │ partitioning_scheme: ││ partitioning_scheme: │ |
| | │ Hash([k@0], 12) ││ Hash([k@0], 12) │ |
| | └─────────────┬─────────────┘└─────────────┬─────────────┘ |
| | ┌─────────────┴─────────────┐┌─────────────┴─────────────┐ |
| | │ FilterExec ││ FilterExec │ |
| | │ -------------------- ││ -------------------- │ |
| | │ predicate: k = 1 ││ predicate: k = 1 │ |
| | └─────────────┬─────────────┘└─────────────┬─────────────┘ |
| | ┌─────────────┴─────────────┐┌─────────────┴─────────────┐ |
| | │ DataSourceExec ││ DataSourceExec │ |
| | │ -------------------- ││ -------------------- │ |
| | │ bytes: 0 ││ bytes: 0 │ |
| | │ format: memory ││ format: memory │ |
| | │ rows: 0 ││ rows: 0 │ |
| | └───────────────────────────┘└───────────────────────────┘ |
| | |
+---------------+------------------------------------------------------------+
```
- Changed `push_down_all_join` to push down inferred predicates
independently of `left_preserved`/`right_preserved` semantics.
- Added unit tests.
Yes.
No.
---------
Co-authored-by: xudong.w <wxd963996380@gmail.com>1 parent 9522508 commit 4b87cfd
4 files changed
Lines changed: 378 additions & 49 deletions
File tree
- datafusion
- optimizer/src
- sqllogictest/test_files
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
452 | 452 | | |
453 | 453 | | |
454 | 454 | | |
455 | | - | |
| 455 | + | |
456 | 456 | | |
457 | | - | |
| 457 | + | |
458 | 458 | | |
459 | | - | |
| 459 | + | |
460 | 460 | | |
461 | 461 | | |
462 | 462 | | |
| |||
2788 | 2788 | | |
2789 | 2789 | | |
2790 | 2790 | | |
2791 | | - | |
2792 | | - | |
| 2791 | + | |
2793 | 2792 | | |
2794 | 2793 | | |
2795 | 2794 | | |
| |||
2817 | 2816 | | |
2818 | 2817 | | |
2819 | 2818 | | |
2820 | | - | |
| 2819 | + | |
2821 | 2820 | | |
2822 | 2821 | | |
2823 | 2822 | | |
2824 | 2823 | | |
2825 | 2824 | | |
2826 | 2825 | | |
2827 | | - | |
| 2826 | + | |
2828 | 2827 | | |
2829 | 2828 | | |
2830 | 2829 | | |
2831 | 2830 | | |
2832 | | - | |
2833 | | - | |
| 2831 | + | |
2834 | 2832 | | |
2835 | 2833 | | |
2836 | 2834 | | |
| |||
2858 | 2856 | | |
2859 | 2857 | | |
2860 | 2858 | | |
2861 | | - | |
| 2859 | + | |
2862 | 2860 | | |
2863 | 2861 | | |
2864 | 2862 | | |
2865 | 2863 | | |
2866 | | - | |
| 2864 | + | |
2867 | 2865 | | |
2868 | 2866 | | |
2869 | 2867 | | |
| |||
3045 | 3043 | | |
3046 | 3044 | | |
3047 | 3045 | | |
3048 | | - | |
| 3046 | + | |
3049 | 3047 | | |
3050 | 3048 | | |
3051 | 3049 | | |
| |||
Lines changed: 13 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
96 | 97 | | |
97 | 98 | | |
98 | 99 | | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
106 | 108 | | |
107 | 109 | | |
108 | 110 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2106 | 2106 | | |
2107 | 2107 | | |
2108 | 2108 | | |
2109 | | - | |
| 2109 | + | |
2110 | 2110 | | |
2111 | 2111 | | |
2112 | 2112 | | |
| |||
4025 | 4025 | | |
4026 | 4026 | | |
4027 | 4027 | | |
4028 | | - | |
| 4028 | + | |
4029 | 4029 | | |
4030 | 4030 | | |
4031 | 4031 | | |
| |||
4617 | 4617 | | |
4618 | 4618 | | |
4619 | 4619 | | |
4620 | | - | |
| 4620 | + | |
4621 | 4621 | | |
4622 | 4622 | | |
4623 | 4623 | | |
| |||
4664 | 4664 | | |
4665 | 4665 | | |
4666 | 4666 | | |
4667 | | - | |
| 4667 | + | |
4668 | 4668 | | |
4669 | 4669 | | |
4670 | 4670 | | |
| |||
4677 | 4677 | | |
4678 | 4678 | | |
4679 | 4679 | | |
4680 | | - | |
| 4680 | + | |
4681 | 4681 | | |
4682 | 4682 | | |
4683 | 4683 | | |
| |||
4693 | 4693 | | |
4694 | 4694 | | |
4695 | 4695 | | |
4696 | | - | |
| 4696 | + | |
4697 | 4697 | | |
4698 | 4698 | | |
4699 | 4699 | | |
4700 | | - | |
| 4700 | + | |
4701 | 4701 | | |
4702 | 4702 | | |
4703 | 4703 | | |
| |||
4709 | 4709 | | |
4710 | 4710 | | |
4711 | 4711 | | |
4712 | | - | |
| 4712 | + | |
4713 | 4713 | | |
4714 | 4714 | | |
4715 | 4715 | | |
| |||
4722 | 4722 | | |
4723 | 4723 | | |
4724 | 4724 | | |
4725 | | - | |
| 4725 | + | |
4726 | 4726 | | |
4727 | | - | |
| 4727 | + | |
4728 | 4728 | | |
4729 | 4729 | | |
4730 | 4730 | | |
| |||
4736 | 4736 | | |
4737 | 4737 | | |
4738 | 4738 | | |
4739 | | - | |
| 4739 | + | |
4740 | 4740 | | |
4741 | 4741 | | |
4742 | 4742 | | |
| |||
5089 | 5089 | | |
5090 | 5090 | | |
5091 | 5091 | | |
5092 | | - | |
| 5092 | + | |
5093 | 5093 | | |
5094 | 5094 | | |
5095 | 5095 | | |
| |||
5148 | 5148 | | |
5149 | 5149 | | |
5150 | 5150 | | |
5151 | | - | |
5152 | | - | |
| 5151 | + | |
| 5152 | + | |
5153 | 5153 | | |
5154 | | - | |
5155 | | - | |
5156 | | - | |
| 5154 | + | |
| 5155 | + | |
5157 | 5156 | | |
5158 | 5157 | | |
5159 | 5158 | | |
| |||
5168 | 5167 | | |
5169 | 5168 | | |
5170 | 5169 | | |
5171 | | - | |
5172 | | - | |
5173 | | - | |
5174 | | - | |
5175 | | - | |
5176 | | - | |
5177 | | - | |
5178 | | - | |
| 5170 | + | |
| 5171 | + | |
| 5172 | + | |
| 5173 | + | |
| 5174 | + | |
| 5175 | + | |
| 5176 | + | |
| 5177 | + | |
5179 | 5178 | | |
5180 | 5179 | | |
5181 | 5180 | | |
| |||
0 commit comments