@@ -26,6 +26,7 @@ use arrow::datatypes::{DataType, Field, Fields, Schema};
26
26
use datafusion:: datasource:: MemTable ;
27
27
use datafusion:: execution:: context:: SessionContext ;
28
28
use std:: sync:: Arc ;
29
+ use test_utils:: tpcds:: tpcds_schemas;
29
30
use test_utils:: tpch:: tpch_schemas;
30
31
use test_utils:: TableDef ;
31
32
use tokio:: runtime:: Runtime ;
@@ -72,15 +73,19 @@ fn create_context() -> SessionContext {
72
73
. unwrap ( ) ;
73
74
ctx. register_table ( "t1000" , create_table_provider ( "d" , 1000 ) )
74
75
. unwrap ( ) ;
76
+ ctx
77
+ }
75
78
76
- tpch_schemas ( ) . iter ( ) . for_each ( |TableDef { name, schema } | {
79
+ /// Register the table definitions as a MemTable with the context and return the
80
+ /// context
81
+ fn register_defs ( ctx : SessionContext , defs : Vec < TableDef > ) -> SessionContext {
82
+ defs. iter ( ) . for_each ( |TableDef { name, schema } | {
77
83
ctx. register_table (
78
84
name,
79
85
Arc :: new ( MemTable :: try_new ( Arc :: new ( schema. clone ( ) ) , vec ! [ ] ) . unwrap ( ) ) ,
80
86
)
81
87
. unwrap ( ) ;
82
88
} ) ;
83
-
84
89
ctx
85
90
}
86
91
@@ -139,40 +144,79 @@ fn criterion_benchmark(c: &mut Criterion) {
139
144
} )
140
145
} ) ;
141
146
147
+ // --- TPC-H ---
148
+
149
+ let tpch_ctx = register_defs ( SessionContext :: new ( ) , tpch_schemas ( ) ) ;
150
+
142
151
let tpch_queries = [
143
152
"q1" , "q2" , "q3" , "q4" , "q5" , "q6" , "q7" , "q8" , "q9" , "q10" , "q11" , "q12" , "q13" ,
144
153
"q14" , // "q15", q15 has multiple SQL statements which is not supported
145
154
"q16" , "q17" , "q18" , "q19" , "q20" , "q21" , "q22" ,
146
155
] ;
147
156
148
157
for q in tpch_queries {
149
- let sql = std :: fs :: read_to_string ( format ! ( "../../benchmarks/queries/{}.sql" , q ) )
150
- . unwrap ( ) ;
158
+ let sql =
159
+ std :: fs :: read_to_string ( format ! ( "../../benchmarks/queries/{q}.sql" ) ) . unwrap ( ) ;
151
160
c. bench_function ( & format ! ( "physical_plan_tpch_{}" , q) , |b| {
152
- b. iter ( || physical_plan ( & ctx , & sql) )
161
+ b. iter ( || physical_plan ( & tpch_ctx , & sql) )
153
162
} ) ;
154
163
}
155
164
156
165
let all_tpch_sql_queries = tpch_queries
157
166
. iter ( )
158
167
. map ( |q| {
159
- std:: fs:: read_to_string ( format ! ( "../../benchmarks/queries/{}.sql" , q) )
160
- . unwrap ( )
168
+ std:: fs:: read_to_string ( format ! ( "../../benchmarks/queries/{q}.sql" ) ) . unwrap ( )
161
169
} )
162
170
. collect :: < Vec < _ > > ( ) ;
163
171
164
172
c. bench_function ( "physical_plan_tpch_all" , |b| {
165
173
b. iter ( || {
166
174
for sql in & all_tpch_sql_queries {
167
- physical_plan ( & ctx , sql)
175
+ physical_plan ( & tpch_ctx , sql)
168
176
}
169
177
} )
170
178
} ) ;
171
179
172
180
c. bench_function ( "logical_plan_tpch_all" , |b| {
173
181
b. iter ( || {
174
182
for sql in & all_tpch_sql_queries {
175
- logical_plan ( & ctx, sql)
183
+ logical_plan ( & tpch_ctx, sql)
184
+ }
185
+ } )
186
+ } ) ;
187
+
188
+ // --- TPC-DS ---
189
+
190
+ let tpcds_ctx = register_defs ( SessionContext :: new ( ) , tpcds_schemas ( ) ) ;
191
+
192
+ // 10, 35: Physical plan does not support logical expression Exists(<subquery>)
193
+ // 45: Physical plan does not support logical expression (<subquery>)
194
+ // 41: Optimizing disjunctions not supported
195
+ let ignored = [ 10 , 35 , 41 , 45 ] ;
196
+
197
+ let raw_tpcds_sql_queries = ( 1 ..100 )
198
+ . filter ( |q| !ignored. contains ( q) )
199
+ . map ( |q| std:: fs:: read_to_string ( format ! ( "./tests/tpc-ds/{q}.sql" ) ) . unwrap ( ) )
200
+ . collect :: < Vec < _ > > ( ) ;
201
+
202
+ // some queries have multiple statements
203
+ let all_tpcds_sql_queries = raw_tpcds_sql_queries
204
+ . iter ( )
205
+ . flat_map ( |sql| sql. split ( ';' ) . filter ( |s| !s. trim ( ) . is_empty ( ) ) )
206
+ . collect :: < Vec < _ > > ( ) ;
207
+
208
+ c. bench_function ( "physical_plan_tpcds_all" , |b| {
209
+ b. iter ( || {
210
+ for sql in & all_tpcds_sql_queries {
211
+ physical_plan ( & tpcds_ctx, sql)
212
+ }
213
+ } )
214
+ } ) ;
215
+
216
+ c. bench_function ( "logical_plan_tpcds_all" , |b| {
217
+ b. iter ( || {
218
+ for sql in & all_tpcds_sql_queries {
219
+ logical_plan ( & tpcds_ctx, sql)
176
220
}
177
221
} )
178
222
} ) ;
0 commit comments