Skip to content

Commit a59c38c

Browse files
authored
fix: collect statistics for MaterializeCTERef (#18470)
* fix: collect statistics for MaterializeCTERef * fix test * make lint * fix test
1 parent 082e3b7 commit a59c38c

File tree

6 files changed

+58
-30
lines changed

6 files changed

+58
-30
lines changed

src/query/sql/src/executor/format.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,12 @@ fn to_format_tree(
580580
"cte_schema: [{}]",
581581
format_output_columns(plan.cte_schema.clone(), metadata, false)
582582
)));
583+
584+
if let Some(info) = &plan.stat_info {
585+
let items = plan_stats_info_to_format_tree(info);
586+
children.extend(items);
587+
}
588+
583589
append_profile_info(&mut children, profs, plan.plan_id);
584590
Ok(FormatTreeNode::with_children(
585591
"MaterializeCTERef".to_string(),

src/query/sql/src/planner/optimizer/statistics/collect_statistics.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ impl CollectStatisticsOptimizer {
142142
}
143143
Ok(s_expr)
144144
}
145+
RelOperator::MaterializeCTERef(cte_ref) => {
146+
let def_with_stats = self.collect(&cte_ref.def).await?;
147+
let mut new_cte_ref = cte_ref.clone();
148+
new_cte_ref.def = def_with_stats;
149+
150+
Ok(s_expr.replace_plan(Arc::new(RelOperator::MaterializeCTERef(new_cte_ref))))
151+
}
145152
_ => {
146153
let mut children = Vec::with_capacity(s_expr.arity());
147154
for child in s_expr.children() {

tests/sqllogictests/suites/mode/standalone/explain/explain_grouping_sets.test

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ Sequence
129129
│ │ │ │ │ │ ├── estimated rows: 1.00
130130
│ │ │ │ │ │ └── MaterializeCTERef
131131
│ │ │ │ │ │ ├── cte_name: cte_groupingsets_16366510952463710337
132-
│ │ │ │ │ │ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
132+
│ │ │ │ │ │ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
133+
│ │ │ │ │ │ └── estimated rows: 1.00
133134
│ │ │ │ │ └── EvalScalar
134135
│ │ │ │ │ ├── output columns: [a (#8), b (#9), c (#10)]
135136
│ │ │ │ │ ├── expressions: [NULL, TRY_CAST(group_item (#2) AS UInt8 NULL), NULL]
@@ -145,7 +146,8 @@ Sequence
145146
│ │ │ │ │ ├── estimated rows: 1.00
146147
│ │ │ │ │ └── MaterializeCTERef
147148
│ │ │ │ │ ├── cte_name: cte_groupingsets_16366510952463710337
148-
│ │ │ │ │ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
149+
│ │ │ │ │ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
150+
│ │ │ │ │ └── estimated rows: 1.00
149151
│ │ │ │ └── EvalScalar
150152
│ │ │ │ ├── output columns: [a (#8), b (#9), c (#10)]
151153
│ │ │ │ ├── expressions: [NULL, NULL, TRY_CAST(group_item (#3) AS UInt8 NULL)]
@@ -161,7 +163,8 @@ Sequence
161163
│ │ │ │ ├── estimated rows: 1.00
162164
│ │ │ │ └── MaterializeCTERef
163165
│ │ │ │ ├── cte_name: cte_groupingsets_16366510952463710337
164-
│ │ │ │ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
166+
│ │ │ │ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
167+
│ │ │ │ └── estimated rows: 1.00
165168
│ │ │ └── EvalScalar
166169
│ │ │ ├── output columns: [a (#8), b (#9), c (#10)]
167170
│ │ │ ├── expressions: [TRY_CAST(group_item (#1) AS UInt8 NULL), TRY_CAST(group_item (#2) AS UInt8 NULL), NULL]
@@ -177,7 +180,8 @@ Sequence
177180
│ │ │ ├── estimated rows: 1.00
178181
│ │ │ └── MaterializeCTERef
179182
│ │ │ ├── cte_name: cte_groupingsets_16366510952463710337
180-
│ │ │ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
183+
│ │ │ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
184+
│ │ │ └── estimated rows: 1.00
181185
│ │ └── EvalScalar
182186
│ │ ├── output columns: [a (#8), b (#9), c (#10)]
183187
│ │ ├── expressions: [TRY_CAST(group_item (#1) AS UInt8 NULL), NULL, TRY_CAST(group_item (#3) AS UInt8 NULL)]
@@ -193,7 +197,8 @@ Sequence
193197
│ │ ├── estimated rows: 1.00
194198
│ │ └── MaterializeCTERef
195199
│ │ ├── cte_name: cte_groupingsets_16366510952463710337
196-
│ │ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
200+
│ │ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
201+
│ │ └── estimated rows: 1.00
197202
│ └── EvalScalar
198203
│ ├── output columns: [a (#8), b (#9), c (#10)]
199204
│ ├── expressions: [NULL, TRY_CAST(group_item (#2) AS UInt8 NULL), TRY_CAST(group_item (#3) AS UInt8 NULL)]
@@ -209,7 +214,8 @@ Sequence
209214
│ ├── estimated rows: 1.00
210215
│ └── MaterializeCTERef
211216
│ ├── cte_name: cte_groupingsets_16366510952463710337
212-
│ └── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
217+
│ ├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
218+
│ └── estimated rows: 1.00
213219
└── EvalScalar
214220
├── output columns: [a (#8), b (#9), c (#10)]
215221
├── expressions: [TRY_CAST(group_item (#1) AS UInt8 NULL), TRY_CAST(group_item (#2) AS UInt8 NULL), TRY_CAST(group_item (#3) AS UInt8 NULL)]
@@ -225,4 +231,5 @@ Sequence
225231
├── estimated rows: 1.00
226232
└── MaterializeCTERef
227233
├── cte_name: cte_groupingsets_16366510952463710337
228-
└── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
234+
├── cte_schema: [number (#0), a (#1), b (#2), c (#3)]
235+
└── estimated rows: 1.00

tests/sqllogictests/suites/mode/standalone/explain/materialized_cte.test

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ Sequence
2020
├── keys is null equal: [false]
2121
├── filters: []
2222
├── build join filters:
23-
│ └── filter id:0, build key:t2.b (#1), probe key:t1.a (#0), filter type:bloom,inlist,min_max
24-
├── estimated rows: 0.00
23+
│ └── filter id:0, build key:t2.b (#1), probe key:t1.a (#0), filter type:inlist,min_max
24+
├── estimated rows: 100.00
2525
├── MaterializeCTERef(Build)
2626
│ ├── cte_name: t1
27-
│ └── cte_schema: [number (#1)]
27+
│ ├── cte_schema: [number (#1)]
28+
│ └── estimated rows: 10.00
2829
└── MaterializeCTERef(Probe)
2930
├── cte_name: t1
30-
└── cte_schema: [number (#0)]
31+
├── cte_schema: [number (#0)]
32+
└── estimated rows: 10.00
3133

3234
query T
3335
explain with t1 as materialized (select number as a from numbers(10)), t2 as materialized (select a as b from t1) select t1.a from t1 join t2 on t1.a = t2.b;
@@ -47,7 +49,8 @@ Sequence
4749
├── MaterializedCTE: t2
4850
│ └── MaterializeCTERef
4951
│ ├── cte_name: t1
50-
│ └── cte_schema: [number (#2)]
52+
│ ├── cte_schema: [number (#2)]
53+
│ └── estimated rows: 10.00
5154
└── HashJoin
5255
├── output columns: [numbers.number (#0)]
5356
├── join type: INNER
@@ -56,11 +59,13 @@ Sequence
5659
├── keys is null equal: [false]
5760
├── filters: []
5861
├── build join filters:
59-
│ └── filter id:0, build key:t2.b (#1), probe key:t1.a (#0), filter type:bloom,inlist,min_max
60-
├── estimated rows: 0.00
62+
│ └── filter id:0, build key:t2.b (#1), probe key:t1.a (#0), filter type:inlist,min_max
63+
├── estimated rows: 100.00
6164
├── MaterializeCTERef(Build)
6265
│ ├── cte_name: t2
63-
│ └── cte_schema: [number (#1)]
66+
│ ├── cte_schema: [number (#1)]
67+
│ └── estimated rows: 10.00
6468
└── MaterializeCTERef(Probe)
6569
├── cte_name: t1
66-
└── cte_schema: [number (#0)]
70+
├── cte_schema: [number (#0)]
71+
└── estimated rows: 10.00

tests/sqllogictests/suites/mode/standalone/explain/push_down_filter/push_down_filter_join/push_down_filter_self_join.test

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,21 @@ Sequence
4040
├── MaterializedCTE: b
4141
│ └── MaterializeCTERef
4242
│ ├── cte_name: a
43-
│ └── cte_schema: [a (#16), b (#17)]
43+
│ ├── cte_schema: [a (#16), b (#17)]
44+
│ └── estimated rows: 20.00
4445
└── HashJoin
4546
├── output columns: [a (#4), b (#5), b (#11), a (#10)]
4647
├── join type: INNER
4748
├── build keys: [b2.a (#10)]
4849
├── probe keys: [b1.a (#4)]
4950
├── keys is null equal: [false]
5051
├── filters: [d.b (#5) < d.b (#11)]
51-
├── estimated rows: 0.00
52+
├── estimated rows: 400.00
5253
├── MaterializeCTERef(Build)
5354
│ ├── cte_name: b
54-
│ └── cte_schema: [a (#10), b (#11)]
55+
│ ├── cte_schema: [a (#10), b (#11)]
56+
│ └── estimated rows: 20.00
5557
└── MaterializeCTERef(Probe)
5658
├── cte_name: b
57-
└── cte_schema: [a (#4), b (#5)]
59+
├── cte_schema: [a (#4), b (#5)]
60+
└── estimated rows: 20.00

tests/sqllogictests/suites/tpch/join_order.test

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -731,17 +731,17 @@ Sequence
731731
│ └── Scan: default.tpch_test.lineitem (#3) (read rows: 6001215)
732732
└── HashJoin: INNER
733733
├── Build
734-
│ └── HashJoin: INNER
735-
│ ├── Build
736-
│ │ └── MaterializeCTERef
737-
│ │ ├── cte_name: revenue
738-
│ │ └── cte_schema: [l_suppkey (#9), total_revenue (#25)]
739-
│ └── Probe
740-
│ └── Scan: default.tpch_test.supplier (#0) (read rows: 10000)
734+
│ └── MaterializeCTERef
735+
│ ├── cte_name: revenue
736+
│ └── cte_schema: [l_suppkey (#28), total_revenue (#44)]
741737
└── Probe
742-
└── MaterializeCTERef
743-
├── cte_name: revenue
744-
└── cte_schema: [l_suppkey (#28), total_revenue (#44)]
738+
└── HashJoin: INNER
739+
├── Build
740+
│ └── MaterializeCTERef
741+
│ ├── cte_name: revenue
742+
│ └── cte_schema: [l_suppkey (#9), total_revenue (#25)]
743+
└── Probe
744+
└── Scan: default.tpch_test.supplier (#0) (read rows: 10000)
745745

746746

747747
# Q16

0 commit comments

Comments
 (0)