in src/columnar_storage/src/storage.rs [258:298]
fn build_write_props(write_options: WriteConfig, num_primary_key: usize) -> WriterProperties {
let sorting_columns = write_options.enable_sorting_columns.then(|| {
(0..num_primary_key)
.map(|i| {
SortingColumn::new(i as i32, false /* desc */, true /* nulls_first */)
})
.collect::<Vec<_>>()
});
let mut builder = WriterProperties::builder()
.set_max_row_group_size(write_options.max_row_group_size)
.set_write_batch_size(write_options.write_bacth_size)
.set_sorting_columns(sorting_columns)
.set_dictionary_enabled(write_options.enable_dict)
.set_bloom_filter_enabled(write_options.enable_bloom_filter)
.set_encoding(write_options.encoding.into())
.set_compression(write_options.compression.into());
if write_options.column_options.is_none() {
return builder.build();
}
for (col_name, col_opt) in write_options.column_options.unwrap() {
let col_path = ColumnPath::new(vec![col_name.to_string()]);
if let Some(enable_dict) = col_opt.enable_dict {
builder = builder.set_column_dictionary_enabled(col_path.clone(), enable_dict);
}
if let Some(enable_bloom_filter) = col_opt.enable_bloom_filter {
builder =
builder.set_column_bloom_filter_enabled(col_path.clone(), enable_bloom_filter);
}
if let Some(encoding) = col_opt.encoding {
builder = builder.set_column_encoding(col_path.clone(), encoding.into());
}
if let Some(compression) = col_opt.compression {
builder = builder.set_column_compression(col_path, compression.into());
}
}
builder.build()
}