@@ -20,161 +20,95 @@ extern crate criterion;
20
20
extern crate core;
21
21
22
22
use arrow:: array:: ArrayRef ;
23
- use arrow:: datatypes:: { DataType , Int64Type , UInt64Type } ;
23
+ use arrow:: datatypes:: { Int64Type , UInt64Type } ;
24
24
use arrow:: row:: { RowConverter , SortField } ;
25
25
use arrow:: util:: bench_util:: {
26
26
create_primitive_array, create_string_array_with_len, create_string_dict_array,
27
27
} ;
28
28
use arrow_array:: types:: Int32Type ;
29
+ use arrow_array:: Array ;
29
30
use criterion:: { black_box, Criterion } ;
30
31
use std:: sync:: Arc ;
31
32
32
- fn row_bench ( c : & mut Criterion ) {
33
- let cols = vec ! [ Arc :: new( create_primitive_array:: <UInt64Type >( 4096 , 0. ) ) as ArrayRef ] ;
33
+ fn do_bench ( c : & mut Criterion , name : & str , cols : Vec < ArrayRef > ) {
34
+ let fields: Vec < _ > = cols
35
+ . iter ( )
36
+ . map ( |x| SortField :: new ( x. data_type ( ) . clone ( ) ) )
37
+ . collect ( ) ;
34
38
35
- c. bench_function ( "row_batch 4096 u64(0)" , |b| {
39
+ c. bench_function ( & format ! ( "convert_columns {}" , name ) , |b| {
36
40
b. iter ( || {
37
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new ( DataType :: UInt64 ) ] ) ;
38
- black_box ( converter. convert_columns ( & cols) )
41
+ let mut converter = RowConverter :: new ( fields . clone ( ) ) ;
42
+ black_box ( converter. convert_columns ( & cols) . unwrap ( ) )
39
43
} ) ;
40
44
} ) ;
41
45
42
- let cols = vec ! [ Arc :: new( create_primitive_array:: <Int64Type >( 4096 , 0. ) ) as ArrayRef ] ;
46
+ let mut converter = RowConverter :: new ( fields) ;
47
+ let rows = converter. convert_columns ( & cols) . unwrap ( ) ;
43
48
44
- c. bench_function ( "row_batch 4096 i64(0)" , |b| {
45
- b. iter ( || {
46
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Int64 ) ] ) ;
47
- black_box ( converter. convert_columns ( & cols) )
48
- } ) ;
49
+ c. bench_function ( & format ! ( "convert_rows {}" , name) , |b| {
50
+ b. iter ( || black_box ( converter. convert_rows ( & rows) . unwrap ( ) ) ) ;
49
51
} ) ;
52
+ }
53
+
54
+ fn row_bench ( c : & mut Criterion ) {
55
+ let cols = vec ! [ Arc :: new( create_primitive_array:: <UInt64Type >( 4096 , 0. ) ) as ArrayRef ] ;
56
+ do_bench ( c, "4096 u64(0)" , cols) ;
57
+
58
+ let cols = vec ! [ Arc :: new( create_primitive_array:: <Int64Type >( 4096 , 0. ) ) as ArrayRef ] ;
59
+ do_bench ( c, "4096 i64(0)" , cols) ;
50
60
51
61
let cols =
52
62
vec ! [ Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0. , 10 ) ) as ArrayRef ] ;
53
-
54
- c. bench_function ( "row_batch 4096 string(10, 0)" , |b| {
55
- b. iter ( || {
56
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
57
- black_box ( converter. convert_columns ( & cols) )
58
- } ) ;
59
- } ) ;
63
+ do_bench ( c, "4096 string(10, 0)" , cols) ;
60
64
61
65
let cols =
62
66
vec ! [ Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0. , 30 ) ) as ArrayRef ] ;
63
-
64
- c. bench_function ( "row_batch 4096 string(30, 0)" , |b| {
65
- b. iter ( || {
66
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
67
- black_box ( converter. convert_columns ( & cols) )
68
- } ) ;
69
- } ) ;
67
+ do_bench ( c, "4096 string(30, 0)" , cols) ;
70
68
71
69
let cols =
72
70
vec ! [ Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0. , 100 ) ) as ArrayRef ] ;
73
-
74
- c. bench_function ( "row_batch 4096 string(100, 0)" , |b| {
75
- b. iter ( || {
76
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
77
- black_box ( converter. convert_columns ( & cols) )
78
- } ) ;
79
- } ) ;
71
+ do_bench ( c, "4096 string(100, 0)" , cols) ;
80
72
81
73
let cols =
82
74
vec ! [ Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0.5 , 100 ) ) as ArrayRef ] ;
83
-
84
- c. bench_function ( "row_batch 4096 string(100, 0.5)" , |b| {
85
- b. iter ( || {
86
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
87
- black_box ( converter. convert_columns ( & cols) )
88
- } ) ;
89
- } ) ;
75
+ do_bench ( c, "4096 string(100, 0.5)" , cols) ;
90
76
91
77
let cols =
92
78
vec ! [ Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0. , 10 ) ) as ArrayRef ] ;
93
-
94
- c. bench_function ( "row_batch 4096 string_dictionary(10, 0)" , |b| {
95
- b. iter ( || {
96
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
97
- black_box ( converter. convert_columns ( & cols) )
98
- } ) ;
99
- } ) ;
79
+ do_bench ( c, "4096 string_dictionary(10, 0)" , cols) ;
100
80
101
81
let cols =
102
82
vec ! [ Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0. , 30 ) ) as ArrayRef ] ;
103
-
104
- c. bench_function ( "row_batch 4096 string_dictionary(30, 0)" , |b| {
105
- b. iter ( || {
106
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
107
- black_box ( converter. convert_columns ( & cols) )
108
- } ) ;
109
- } ) ;
83
+ do_bench ( c, "4096 string_dictionary(30, 0)" , cols) ;
110
84
111
85
let cols =
112
86
vec ! [ Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0. , 100 ) ) as ArrayRef ] ;
113
-
114
- c. bench_function ( "row_batch 4096 string_dictionary(100, 0)" , |b| {
115
- b. iter ( || {
116
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
117
- black_box ( converter. convert_columns ( & cols) )
118
- } ) ;
119
- } ) ;
87
+ do_bench ( c, "4096 string_dictionary(100, 0)" , cols) ;
120
88
121
89
let cols =
122
90
vec ! [ Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0.5 , 100 ) ) as ArrayRef ] ;
91
+ do_bench ( c, "4096 string_dictionary(100, 0.5)" , cols) ;
123
92
124
- c. bench_function ( "row_batch 4096 string_dictionary(100, 0.5)" , |b| {
125
- b. iter ( || {
126
- let mut converter = RowConverter :: new ( vec ! [ SortField :: new( DataType :: Utf8 ) ] ) ;
127
- black_box ( converter. convert_columns ( & cols) )
128
- } ) ;
129
- } ) ;
130
-
131
- let cols = [
93
+ let cols = vec ! [
132
94
Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0.5 , 20 ) ) as ArrayRef ,
133
95
Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0. , 30 ) ) as ArrayRef ,
134
96
Arc :: new( create_string_array_with_len:: <i32 >( 4096 , 0. , 100 ) ) as ArrayRef ,
135
97
Arc :: new( create_primitive_array:: <Int64Type >( 4096 , 0. ) ) as ArrayRef ,
136
98
] ;
137
-
138
- let fields = [
139
- SortField :: new ( DataType :: Utf8 ) ,
140
- SortField :: new ( DataType :: Utf8 ) ,
141
- SortField :: new ( DataType :: Utf8 ) ,
142
- SortField :: new ( DataType :: Int64 ) ,
143
- ] ;
144
-
145
- c. bench_function (
146
- "row_batch 4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)" ,
147
- |b| {
148
- b. iter ( || {
149
- let mut converter = RowConverter :: new ( fields. to_vec ( ) ) ;
150
- black_box ( converter. convert_columns ( & cols) )
151
- } ) ;
152
- } ,
99
+ do_bench (
100
+ c,
101
+ "4096 string(20, 0.5), string(30, 0), string(100, 0), i64(0)" ,
102
+ cols,
153
103
) ;
154
104
155
- let cols = [
105
+ let cols = vec ! [
156
106
Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0.5 , 20 ) ) as ArrayRef ,
157
107
Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0. , 30 ) ) as ArrayRef ,
158
108
Arc :: new( create_string_dict_array:: <Int32Type >( 4096 , 0. , 100 ) ) as ArrayRef ,
159
109
Arc :: new( create_primitive_array:: <Int64Type >( 4096 , 0. ) ) as ArrayRef ,
160
110
] ;
161
-
162
- let fields = [
163
- SortField :: new ( DataType :: Utf8 ) ,
164
- SortField :: new ( DataType :: Utf8 ) ,
165
- SortField :: new ( DataType :: Utf8 ) ,
166
- SortField :: new ( DataType :: Int64 ) ,
167
- ] ;
168
-
169
- c. bench_function (
170
- "row_batch 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)" ,
171
- |b| {
172
- b. iter ( || {
173
- let mut converter = RowConverter :: new ( fields. to_vec ( ) ) ;
174
- black_box ( converter. convert_columns ( & cols) )
175
- } ) ;
176
- } ,
177
- ) ;
111
+ do_bench ( c, "4096 4096 string_dictionary(20, 0.5), string_dictionary(30, 0), string_dictionary(100, 0), i64(0)" , cols) ;
178
112
}
179
113
180
114
criterion_group ! ( benches, row_bench) ;
0 commit comments