Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8010857

Browse files
authored
fix: Avoid unnecessary input repartitioning with ScalarSubqueryExec (apache#21986)
## Which issue does this PR close? - Closes apache#21349. ## Rationale for this change `ScalarSubqueryExec` marked its main input (the parent query of the subquery) as benefitting from partitioning, but that was incorrect: `ScalarSubqueryExec` is just a passthrough node, so it doesn't benefit from input partitioning itself. This bug resulted in inserting unnecessary `RepartitionExec` nodes underneath `ScalarSubqueryExec`, notably in TPC-H Q22. ## What changes are included in this PR? * Fix input-partitioning behavior for `ScalarSubqueryExec` * Add SLT test to confirm this behavior * Update expected plan for TPC-H Q22 ## Are these changes tested? Yes. ## Are there any user-facing changes? Yes, some query plans will change (and improve).
1 parent f043092 commit 8010857

5 files changed

Lines changed: 127 additions & 80 deletions

File tree

datafusion/physical-plan/src/scalar_subquery.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,9 @@ impl ExecutionPlan for ScalarSubqueryExec {
239239
}
240240

241241
fn benefits_from_input_partitioning(&self) -> Vec<bool> {
242-
// Only the main input; subquery children produce at most one row, so
243-
// repartitioning them has no benefit.
244-
self.true_for_input_only()
242+
// ScalarSubqueryExec is a pass-through coordinator: it does not
243+
// benefit from repartitioning any child directly below it.
244+
vec![false; self.subqueries.len() + 1]
245245
}
246246

247247
fn partition_statistics(&self, partition: Option<usize>) -> Result<Arc<Statistics>> {

datafusion/sqllogictest/test_files/subquery.slt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,6 +1824,56 @@ SELECT x FROM sq_main ORDER BY x + (SELECT max(v) FROM sq_values);
18241824
10
18251825
20
18261826

1827+
# ScalarSubqueryExec should not add an extra repartition above an ordered main
1828+
# input. The main child should be SortPreservingMergeExec directly.
1829+
query TT
1830+
EXPLAIN SELECT i
1831+
FROM generate_series(1, 10) AS t(i)
1832+
WHERE i > (
1833+
SELECT avg(j) FROM generate_series(1, 10) AS u(j)
1834+
)
1835+
ORDER BY i;
1836+
----
1837+
logical_plan
1838+
01)Sort: t.i ASC NULLS LAST
1839+
02)--SubqueryAlias: t
1840+
03)----Projection: generate_series().value AS i
1841+
04)------Filter: CAST(generate_series().value AS Float64) > (<subquery>)
1842+
05)--------Subquery:
1843+
06)----------Aggregate: groupBy=[[]], aggr=[[avg(CAST(u.j AS Float64))]]
1844+
07)------------SubqueryAlias: u
1845+
08)--------------Projection: generate_series().value AS j
1846+
09)----------------TableScan: generate_series() projection=[value]
1847+
10)--------TableScan: generate_series() projection=[value]
1848+
physical_plan
1849+
01)ScalarSubqueryExec: subqueries=1
1850+
02)--SortPreservingMergeExec: [i@0 ASC NULLS LAST]
1851+
03)----SortExec: expr=[i@0 ASC NULLS LAST], preserve_partitioning=[true]
1852+
04)------ProjectionExec: expr=[value@0 as i]
1853+
05)--------FilterExec: CAST(value@0 AS Float64) > scalar_subquery(<pending>)
1854+
06)----------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
1855+
07)------------LazyMemoryExec: partitions=1, batch_generators=[generate_series: start=1, end=10, batch_size=8192]
1856+
08)--AggregateExec: mode=Final, gby=[], aggr=[avg(u.j)]
1857+
09)----CoalescePartitionsExec
1858+
10)------AggregateExec: mode=Partial, gby=[], aggr=[avg(u.j)]
1859+
11)--------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
1860+
12)----------ProjectionExec: expr=[value@0 as j]
1861+
13)------------LazyMemoryExec: partitions=1, batch_generators=[generate_series: start=1, end=10, batch_size=8192]
1862+
1863+
query I
1864+
SELECT i
1865+
FROM generate_series(1, 10) AS t(i)
1866+
WHERE i > (
1867+
SELECT avg(j) FROM generate_series(1, 10) AS u(j)
1868+
)
1869+
ORDER BY i;
1870+
----
1871+
6
1872+
7
1873+
8
1874+
9
1875+
10
1876+
18271877
# Aggregate function argument containing uncorrelated scalar subquery
18281878
query I
18291879
SELECT sum(x + (SELECT max(v) FROM sq_values)) AS s FROM sq_main;

datafusion/sqllogictest/test_files/tpch/plans/q11.slt.part

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -74,37 +74,36 @@ logical_plan
7474
25)----------------TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8View("GERMANY")]
7575
physical_plan
7676
01)ScalarSubqueryExec: subqueries=1
77-
02)--RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true
78-
03)----SortPreservingMergeExec: [value@1 DESC], fetch=10
79-
04)------SortExec: TopK(fetch=10), expr=[value@1 DESC], preserve_partitioning=[true]
80-
05)--------ProjectionExec: expr=[ps_partkey@0 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 as value]
81-
06)----------FilterExec: CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 AS Decimal128(38, 15)) > scalar_subquery(<pending>)
82-
07)------------AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
83-
08)--------------RepartitionExec: partitioning=Hash([ps_partkey@0], 4), input_partitions=4
84-
09)----------------AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
85-
10)------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[ps_partkey@0, ps_availqty@1, ps_supplycost@2]
86-
11)--------------------RepartitionExec: partitioning=Hash([s_nationkey@3], 4), input_partitions=4
87-
12)----------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_availqty@2, ps_supplycost@3, s_nationkey@5]
88-
13)------------------------RepartitionExec: partitioning=Hash([ps_suppkey@1], 4), input_partitions=4
89-
14)--------------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:0..2932049], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:2932049..5864098], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:5864098..8796147], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:8796147..11728193]]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost], file_type=csv, has_header=false
90-
15)------------------------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
91-
16)--------------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_nationkey], file_type=csv, has_header=false
92-
17)--------------------RepartitionExec: partitioning=Hash([n_nationkey@0], 4), input_partitions=4
93-
18)----------------------FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
94-
19)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
95-
20)--------------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/nation.tbl]]}, projection=[n_nationkey, n_name], file_type=csv, has_header=false
96-
21)--ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)]
97-
22)----AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
98-
23)------CoalescePartitionsExec
99-
24)--------AggregateExec: mode=Partial, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
100-
25)----------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_availqty@0, ps_supplycost@1]
101-
26)------------RepartitionExec: partitioning=Hash([s_nationkey@2], 4), input_partitions=4
102-
27)--------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@0, s_suppkey@0)], projection=[ps_availqty@1, ps_supplycost@2, s_nationkey@4]
103-
28)----------------RepartitionExec: partitioning=Hash([ps_suppkey@0], 4), input_partitions=4
104-
29)------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:0..2932049], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:2932049..5864098], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:5864098..8796147], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:8796147..11728193]]}, projection=[ps_suppkey, ps_availqty, ps_supplycost], file_type=csv, has_header=false
105-
30)----------------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
106-
31)------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_nationkey], file_type=csv, has_header=false
107-
32)------------RepartitionExec: partitioning=Hash([n_nationkey@0], 4), input_partitions=4
108-
33)--------------FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
109-
34)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
110-
35)------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/nation.tbl]]}, projection=[n_nationkey, n_name], file_type=csv, has_header=false
77+
02)--SortPreservingMergeExec: [value@1 DESC], fetch=10
78+
03)----SortExec: TopK(fetch=10), expr=[value@1 DESC], preserve_partitioning=[true]
79+
04)------ProjectionExec: expr=[ps_partkey@0 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 as value]
80+
05)--------FilterExec: CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 AS Decimal128(38, 15)) > scalar_subquery(<pending>)
81+
06)----------AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
82+
07)------------RepartitionExec: partitioning=Hash([ps_partkey@0], 4), input_partitions=4
83+
08)--------------AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
84+
09)----------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[ps_partkey@0, ps_availqty@1, ps_supplycost@2]
85+
10)------------------RepartitionExec: partitioning=Hash([s_nationkey@3], 4), input_partitions=4
86+
11)--------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_availqty@2, ps_supplycost@3, s_nationkey@5]
87+
12)----------------------RepartitionExec: partitioning=Hash([ps_suppkey@1], 4), input_partitions=4
88+
13)------------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:0..2932049], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:2932049..5864098], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:5864098..8796147], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:8796147..11728193]]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost], file_type=csv, has_header=false
89+
14)----------------------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
90+
15)------------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_nationkey], file_type=csv, has_header=false
91+
16)------------------RepartitionExec: partitioning=Hash([n_nationkey@0], 4), input_partitions=4
92+
17)--------------------FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
93+
18)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
94+
19)------------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/nation.tbl]]}, projection=[n_nationkey, n_name], file_type=csv, has_header=false
95+
20)--ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)]
96+
21)----AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
97+
22)------CoalescePartitionsExec
98+
23)--------AggregateExec: mode=Partial, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
99+
24)----------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_availqty@0, ps_supplycost@1]
100+
25)------------RepartitionExec: partitioning=Hash([s_nationkey@2], 4), input_partitions=4
101+
26)--------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@0, s_suppkey@0)], projection=[ps_availqty@1, ps_supplycost@2, s_nationkey@4]
102+
27)----------------RepartitionExec: partitioning=Hash([ps_suppkey@0], 4), input_partitions=4
103+
28)------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:0..2932049], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:2932049..5864098], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:5864098..8796147], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/partsupp.tbl:8796147..11728193]]}, projection=[ps_suppkey, ps_availqty, ps_supplycost], file_type=csv, has_header=false
104+
29)----------------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
105+
30)------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_nationkey], file_type=csv, has_header=false
106+
31)------------RepartitionExec: partitioning=Hash([n_nationkey@0], 4), input_partitions=4
107+
32)--------------FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
108+
33)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
109+
34)------------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/nation.tbl]]}, projection=[n_nationkey, n_name], file_type=csv, has_header=false

datafusion/sqllogictest/test_files/tpch/plans/q15.slt.part

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,24 @@ logical_plan
7171
19)------------------TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate], partial_filters=[lineitem.l_shipdate >= Date32("1996-01-01"), lineitem.l_shipdate < Date32("1996-04-01")]
7272
physical_plan
7373
01)ScalarSubqueryExec: subqueries=1
74-
02)--RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true
75-
03)----SortPreservingMergeExec: [s_suppkey@0 ASC NULLS LAST]
76-
04)------SortExec: expr=[s_suppkey@0 ASC NULLS LAST], preserve_partitioning=[true]
77-
05)--------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, supplier_no@0)], projection=[s_suppkey@0, s_name@1, s_address@2, s_phone@3, total_revenue@5]
78-
06)----------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
79-
07)------------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_name, s_address, s_phone], file_type=csv, has_header=false
80-
08)----------ProjectionExec: expr=[l_suppkey@0 as supplier_no, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as total_revenue]
81-
09)------------FilterExec: sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 = scalar_subquery(<pending>)
82-
10)--------------AggregateExec: mode=FinalPartitioned, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
83-
11)----------------RepartitionExec: partitioning=Hash([l_suppkey@0], 4), input_partitions=4
84-
12)------------------AggregateExec: mode=Partial, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
85-
13)--------------------FilterExec: l_shipdate@3 >= 1996-01-01 AND l_shipdate@3 < 1996-04-01, projection=[l_suppkey@0, l_extendedprice@1, l_discount@2]
86-
14)----------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:0..18561749], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:18561749..37123498], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:37123498..55685247], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:55685247..74246996]]}, projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=csv, has_header=false
87-
15)--AggregateExec: mode=Final, gby=[], aggr=[max(revenue0.total_revenue)]
88-
16)----CoalescePartitionsExec
89-
17)------AggregateExec: mode=Partial, gby=[], aggr=[max(revenue0.total_revenue)]
90-
18)--------ProjectionExec: expr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as total_revenue]
91-
19)----------AggregateExec: mode=FinalPartitioned, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
92-
20)------------RepartitionExec: partitioning=Hash([l_suppkey@0], 4), input_partitions=4
93-
21)--------------AggregateExec: mode=Partial, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
94-
22)----------------FilterExec: l_shipdate@3 >= 1996-01-01 AND l_shipdate@3 < 1996-04-01, projection=[l_suppkey@0, l_extendedprice@1, l_discount@2]
95-
23)------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:0..18561749], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:18561749..37123498], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:37123498..55685247], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:55685247..74246996]]}, projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=csv, has_header=false
74+
02)--SortPreservingMergeExec: [s_suppkey@0 ASC NULLS LAST]
75+
03)----SortExec: expr=[s_suppkey@0 ASC NULLS LAST], preserve_partitioning=[true]
76+
04)------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, supplier_no@0)], projection=[s_suppkey@0, s_name@1, s_address@2, s_phone@3, total_revenue@5]
77+
05)--------RepartitionExec: partitioning=Hash([s_suppkey@0], 4), input_partitions=1
78+
06)----------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/supplier.tbl]]}, projection=[s_suppkey, s_name, s_address, s_phone], file_type=csv, has_header=false
79+
07)--------ProjectionExec: expr=[l_suppkey@0 as supplier_no, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as total_revenue]
80+
08)----------FilterExec: sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 = scalar_subquery(<pending>)
81+
09)------------AggregateExec: mode=FinalPartitioned, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
82+
10)--------------RepartitionExec: partitioning=Hash([l_suppkey@0], 4), input_partitions=4
83+
11)----------------AggregateExec: mode=Partial, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
84+
12)------------------FilterExec: l_shipdate@3 >= 1996-01-01 AND l_shipdate@3 < 1996-04-01, projection=[l_suppkey@0, l_extendedprice@1, l_discount@2]
85+
13)--------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:0..18561749], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:18561749..37123498], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:37123498..55685247], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:55685247..74246996]]}, projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=csv, has_header=false
86+
14)--AggregateExec: mode=Final, gby=[], aggr=[max(revenue0.total_revenue)]
87+
15)----CoalescePartitionsExec
88+
16)------AggregateExec: mode=Partial, gby=[], aggr=[max(revenue0.total_revenue)]
89+
17)--------ProjectionExec: expr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as total_revenue]
90+
18)----------AggregateExec: mode=FinalPartitioned, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
91+
19)------------RepartitionExec: partitioning=Hash([l_suppkey@0], 4), input_partitions=4
92+
20)--------------AggregateExec: mode=Partial, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]
93+
21)----------------FilterExec: l_shipdate@3 >= 1996-01-01 AND l_shipdate@3 < 1996-04-01, projection=[l_suppkey@0, l_extendedprice@1, l_discount@2]
94+
22)------------------DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:0..18561749], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:18561749..37123498], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:37123498..55685247], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/tpch/data/lineitem.tbl:55685247..74246996]]}, projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=csv, has_header=false

0 commit comments

Comments
 (0)