@@ -195,6 +195,12 @@ pub struct Server {
195
195
196
196
/// Server should check for update or not
197
197
pub check_update : bool ,
198
+
199
+ /// Rows in Parquet Rowgroup
200
+ pub row_group_size : usize ,
201
+
202
+ /// Parquet compression algorithm
203
+ pub parquet_compression : Compression ,
198
204
}
199
205
200
206
impl FromArgMatches for Server {
@@ -231,6 +237,24 @@ impl FromArgMatches for Server {
231
237
. get_one :: < bool > ( Self :: CHECK_UPDATE )
232
238
. cloned ( )
233
239
. expect ( "default for check update" ) ;
240
+ self . row_group_size = m
241
+ . get_one :: < usize > ( Self :: ROW_GROUP_SIZE )
242
+ . cloned ( )
243
+ . expect ( "default for row_group size" ) ;
244
+ self . parquet_compression = match m
245
+ . get_one :: < String > ( Self :: PARQUET_COMPRESSION_ALGO )
246
+ . expect ( "default for compression algo" )
247
+ . as_str ( )
248
+ {
249
+ "uncompressed" => Compression :: UNCOMPRESSED ,
250
+ "snappy" => Compression :: SNAPPY ,
251
+ "gzip" => Compression :: GZIP ,
252
+ "lzo" => Compression :: LZO ,
253
+ "brotli" => Compression :: BROTLI ,
254
+ "lz4" => Compression :: LZ4 ,
255
+ "zstd" => Compression :: ZSTD ,
256
+ _ => unreachable ! ( ) ,
257
+ } ;
234
258
235
259
Ok ( ( ) )
236
260
}
@@ -246,6 +270,8 @@ impl Server {
246
270
pub const USERNAME : & str = "username" ;
247
271
pub const PASSWORD : & str = "password" ;
248
272
pub const CHECK_UPDATE : & str = "check-update" ;
273
+ pub const ROW_GROUP_SIZE : & str = "row-group-size" ;
274
+ pub const PARQUET_COMPRESSION_ALGO : & str = "compression-algo" ;
249
275
pub const DEFAULT_USERNAME : & str = "admin" ;
250
276
pub const DEFAULT_PASSWORD : & str = "admin" ;
251
277
@@ -334,6 +360,60 @@ impl Server {
334
360
. value_parser ( value_parser ! ( bool ) )
335
361
. help ( "Password for the basic authentication on the server" ) ,
336
362
)
363
+ . arg (
364
+ Arg :: new ( Self :: ROW_GROUP_SIZE )
365
+ . long ( Self :: ROW_GROUP_SIZE )
366
+ . env ( "P_PARQUET_ROW_GROUP_SIZE" )
367
+ . value_name ( "NUMBER" )
368
+ . required ( false )
369
+ . default_value ( "16384" )
370
+ . value_parser ( value_parser ! ( usize ) )
371
+ . help ( "Number of rows in a row groups" ) ,
372
+ )
373
+ . arg (
374
+ Arg :: new ( Self :: PARQUET_COMPRESSION_ALGO )
375
+ . long ( Self :: PARQUET_COMPRESSION_ALGO )
376
+ . env ( "P_PARQUET_COMPRESSION_ALGO" )
377
+ . value_name ( "[UNCOMPRESSED, SNAPPY, GZIP, LZO, BROTLI, LZ4, ZSTD]" )
378
+ . required ( false )
379
+ . default_value ( "lz4" )
380
+ . value_parser ( [
381
+ "uncompressed" ,
382
+ "snappy" ,
383
+ "gzip" ,
384
+ "lzo" ,
385
+ "brotli" ,
386
+ "lz4" ,
387
+ "zstd" ] )
388
+ . help ( "Parquet compression algorithm" ) ,
389
+ )
390
+ }
391
+ }
392
+
393
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Default ) ]
394
+ #[ allow( non_camel_case_types, clippy:: upper_case_acronyms) ]
395
+ pub enum Compression {
396
+ UNCOMPRESSED ,
397
+ SNAPPY ,
398
+ GZIP ,
399
+ LZO ,
400
+ BROTLI ,
401
+ #[ default]
402
+ LZ4 ,
403
+ ZSTD ,
404
+ }
405
+
406
+ impl From < Compression > for datafusion:: parquet:: basic:: Compression {
407
+ fn from ( value : Compression ) -> Self {
408
+ match value {
409
+ Compression :: UNCOMPRESSED => datafusion:: parquet:: basic:: Compression :: UNCOMPRESSED ,
410
+ Compression :: SNAPPY => datafusion:: parquet:: basic:: Compression :: SNAPPY ,
411
+ Compression :: GZIP => datafusion:: parquet:: basic:: Compression :: GZIP ,
412
+ Compression :: LZO => datafusion:: parquet:: basic:: Compression :: LZO ,
413
+ Compression :: BROTLI => datafusion:: parquet:: basic:: Compression :: BROTLI ,
414
+ Compression :: LZ4 => datafusion:: parquet:: basic:: Compression :: LZ4 ,
415
+ Compression :: ZSTD => datafusion:: parquet:: basic:: Compression :: ZSTD ,
416
+ }
337
417
}
338
418
}
339
419
0 commit comments