1616// under the License.
1717
1818use datafusion_physical_plan:: metrics:: {
19- Count , ExecutionPlanMetricsSet , Gauge , MetricBuilder , MetricCategory , MetricType ,
20- PruningMetrics , RatioMergeStrategy , RatioMetrics , Time ,
19+ Count , ExecutionPlanMetricsSet , Gauge , Label , MetricBuilder , MetricCategory ,
20+ MetricType , PruningMetrics , RatioMergeStrategy , RatioMetrics , Time ,
2121} ;
2222
2323/// Stores metrics about the parquet execution for a particular parquet file.
@@ -100,46 +100,44 @@ impl ParquetFileMetrics {
100100 filename : & str ,
101101 metrics : & ExecutionPlanMetricsSet ,
102102 ) -> Self {
103+ // Share the filename label across all per-file metrics to avoid
104+ // allocating the same filename string for each metric.
105+ let filename_label = Label :: new ( "filename" , filename. to_string ( ) ) ;
106+ let builder = || MetricBuilder :: new ( metrics) . with_label ( filename_label. clone ( ) ) ;
107+
103108 // -----------------------
104109 // 'summary' level metrics
105110 // -----------------------
106- let row_groups_pruned_bloom_filter = MetricBuilder :: new ( metrics)
107- . with_new_label ( "filename" , filename. to_string ( ) )
111+ let row_groups_pruned_bloom_filter = builder ( )
108112 . with_type ( MetricType :: Summary )
109113 . pruning_metrics ( "row_groups_pruned_bloom_filter" , partition) ;
110114
111- let limit_pruned_row_groups = MetricBuilder :: new ( metrics)
112- . with_new_label ( "filename" , filename. to_string ( ) )
115+ let limit_pruned_row_groups = builder ( )
113116 . with_type ( MetricType :: Summary )
114117 . pruning_metrics ( "limit_pruned_row_groups" , partition) ;
115118
116- let row_groups_pruned_statistics = MetricBuilder :: new ( metrics)
117- . with_new_label ( "filename" , filename. to_string ( ) )
119+ let row_groups_pruned_statistics = builder ( )
118120 . with_type ( MetricType :: Summary )
119121 . pruning_metrics ( "row_groups_pruned_statistics" , partition) ;
120122
121- let page_index_pages_pruned = MetricBuilder :: new ( metrics)
122- . with_new_label ( "filename" , filename. to_string ( ) )
123+ let page_index_pages_pruned = builder ( )
123124 . with_type ( MetricType :: Summary )
124125 . pruning_metrics ( "page_index_pages_pruned" , partition) ;
125126
126- let bytes_scanned = MetricBuilder :: new ( metrics)
127- . with_new_label ( "filename" , filename. to_string ( ) )
127+ let bytes_scanned = builder ( )
128128 . with_type ( MetricType :: Summary )
129129 . with_category ( MetricCategory :: Bytes )
130130 . counter ( "bytes_scanned" , partition) ;
131131
132- let metadata_load_time = MetricBuilder :: new ( metrics)
133- . with_new_label ( "filename" , filename. to_string ( ) )
132+ let metadata_load_time = builder ( )
134133 . with_type ( MetricType :: Summary )
135134 . subset_time ( "metadata_load_time" , partition) ;
136135
137136 let files_ranges_pruned_statistics = MetricBuilder :: new ( metrics)
138137 . with_type ( MetricType :: Summary )
139138 . pruning_metrics ( "files_ranges_pruned_statistics" , partition) ;
140139
141- let scan_efficiency_ratio = MetricBuilder :: new ( metrics)
142- . with_new_label ( "filename" , filename. to_string ( ) )
140+ let scan_efficiency_ratio = builder ( )
143141 . with_type ( MetricType :: Summary )
144142 . ratio_metrics_with_strategy (
145143 "scan_efficiency_ratio" ,
@@ -150,45 +148,35 @@ impl ParquetFileMetrics {
150148 // -----------------------
151149 // 'dev' level metrics
152150 // -----------------------
153- let predicate_evaluation_errors = MetricBuilder :: new ( metrics)
154- . with_new_label ( "filename" , filename. to_string ( ) )
151+ let predicate_evaluation_errors = builder ( )
155152 . with_category ( MetricCategory :: Rows )
156153 . counter ( "predicate_evaluation_errors" , partition) ;
157154
158- let pushdown_rows_pruned = MetricBuilder :: new ( metrics)
159- . with_new_label ( "filename" , filename. to_string ( ) )
155+ let pushdown_rows_pruned = builder ( )
160156 . with_category ( MetricCategory :: Rows )
161157 . counter ( "pushdown_rows_pruned" , partition) ;
162- let pushdown_rows_matched = MetricBuilder :: new ( metrics)
163- . with_new_label ( "filename" , filename. to_string ( ) )
158+ let pushdown_rows_matched = builder ( )
164159 . with_category ( MetricCategory :: Rows )
165160 . counter ( "pushdown_rows_matched" , partition) ;
166161
167- let row_pushdown_eval_time = MetricBuilder :: new ( metrics)
168- . with_new_label ( "filename" , filename. to_string ( ) )
169- . subset_time ( "row_pushdown_eval_time" , partition) ;
170- let statistics_eval_time = MetricBuilder :: new ( metrics)
171- . with_new_label ( "filename" , filename. to_string ( ) )
172- . subset_time ( "statistics_eval_time" , partition) ;
173- let bloom_filter_eval_time = MetricBuilder :: new ( metrics)
174- . with_new_label ( "filename" , filename. to_string ( ) )
175- . subset_time ( "bloom_filter_eval_time" , partition) ;
162+ let row_pushdown_eval_time =
163+ builder ( ) . subset_time ( "row_pushdown_eval_time" , partition) ;
164+ let statistics_eval_time =
165+ builder ( ) . subset_time ( "statistics_eval_time" , partition) ;
166+ let bloom_filter_eval_time =
167+ builder ( ) . subset_time ( "bloom_filter_eval_time" , partition) ;
176168
177- let page_index_eval_time = MetricBuilder :: new ( metrics)
178- . with_new_label ( "filename" , filename. to_string ( ) )
179- . subset_time ( "page_index_eval_time" , partition) ;
169+ let page_index_eval_time =
170+ builder ( ) . subset_time ( "page_index_eval_time" , partition) ;
180171
181- let page_index_rows_pruned = MetricBuilder :: new ( metrics)
182- . with_new_label ( "filename" , filename. to_string ( ) )
183- . pruning_metrics ( "page_index_rows_pruned" , partition) ;
172+ let page_index_rows_pruned =
173+ builder ( ) . pruning_metrics ( "page_index_rows_pruned" , partition) ;
184174
185- let predicate_cache_inner_records = MetricBuilder :: new ( metrics)
186- . with_new_label ( "filename" , filename. to_string ( ) )
175+ let predicate_cache_inner_records = builder ( )
187176 . with_category ( MetricCategory :: Rows )
188177 . gauge ( "predicate_cache_inner_records" , partition) ;
189178
190- let predicate_cache_records = MetricBuilder :: new ( metrics)
191- . with_new_label ( "filename" , filename. to_string ( ) )
179+ let predicate_cache_records = builder ( )
192180 . with_category ( MetricCategory :: Rows )
193181 . gauge ( "predicate_cache_records" , partition) ;
194182
0 commit comments