Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-stream/src/nodes/io_sources/parquet/builder.rs
6939 views
1
use std::sync::Arc;
2
3
use polars_core::config;
4
use polars_io::cloud::CloudOptions;
5
use polars_io::prelude::{FileMetadata, ParallelStrategy, ParquetOptions};
6
use polars_io::utils::byte_source::DynByteSourceBuilder;
7
use polars_plan::dsl::ScanSource;
8
9
use super::{FileReader, ParquetFileReader};
10
use crate::nodes::io_sources::multi_scan::reader_interface::builder::FileReaderBuilder;
11
use crate::nodes::io_sources::multi_scan::reader_interface::capabilities::ReaderCapabilities;
12
13
#[derive(Debug, Clone)]
14
pub struct ParquetReaderBuilder {
15
pub first_metadata: Option<Arc<FileMetadata>>,
16
pub options: Arc<ParquetOptions>,
17
}
18
19
#[cfg(feature = "parquet")]
20
impl FileReaderBuilder for ParquetReaderBuilder {
21
fn reader_name(&self) -> &str {
22
"parquet"
23
}
24
25
fn reader_capabilities(&self) -> ReaderCapabilities {
26
use ReaderCapabilities as RC;
27
28
let mut capabilities = RC::ROW_INDEX
29
| RC::PRE_SLICE
30
| RC::NEGATIVE_PRE_SLICE
31
| RC::PARTIAL_FILTER
32
| RC::MAPPED_COLUMN_PROJECTION;
33
34
if matches!(
35
self.options.parallel,
36
ParallelStrategy::Auto | ParallelStrategy::Prefiltered
37
) {
38
capabilities |= RC::FULL_FILTER;
39
}
40
capabilities
41
}
42
43
fn build_file_reader(
44
&self,
45
source: ScanSource,
46
cloud_options: Option<Arc<CloudOptions>>,
47
scan_source_idx: usize,
48
) -> Box<dyn FileReader> {
49
let scan_source = source;
50
let config = self.options.clone();
51
let verbose = config::verbose();
52
53
let byte_source_builder = if scan_source.is_cloud_url() || config::force_async() {
54
DynByteSourceBuilder::ObjectStore
55
} else {
56
DynByteSourceBuilder::Mmap
57
};
58
59
let reader = ParquetFileReader {
60
scan_source,
61
cloud_options,
62
config,
63
metadata: if scan_source_idx == 0 {
64
self.first_metadata.clone()
65
} else {
66
None
67
},
68
byte_source_builder,
69
verbose,
70
71
init_data: None,
72
};
73
74
Box::new(reader) as Box<dyn FileReader>
75
}
76
}
77
78