Path: blob/main/crates/polars-stream/src/nodes/io_sources/parquet/builder.rs
6939 views
use std::sync::Arc;12use polars_core::config;3use polars_io::cloud::CloudOptions;4use polars_io::prelude::{FileMetadata, ParallelStrategy, ParquetOptions};5use polars_io::utils::byte_source::DynByteSourceBuilder;6use polars_plan::dsl::ScanSource;78use super::{FileReader, ParquetFileReader};9use crate::nodes::io_sources::multi_scan::reader_interface::builder::FileReaderBuilder;10use crate::nodes::io_sources::multi_scan::reader_interface::capabilities::ReaderCapabilities;1112#[derive(Debug, Clone)]13pub struct ParquetReaderBuilder {14pub first_metadata: Option<Arc<FileMetadata>>,15pub options: Arc<ParquetOptions>,16}1718#[cfg(feature = "parquet")]19impl FileReaderBuilder for ParquetReaderBuilder {20fn reader_name(&self) -> &str {21"parquet"22}2324fn reader_capabilities(&self) -> ReaderCapabilities {25use ReaderCapabilities as RC;2627let mut capabilities = RC::ROW_INDEX28| RC::PRE_SLICE29| RC::NEGATIVE_PRE_SLICE30| RC::PARTIAL_FILTER31| RC::MAPPED_COLUMN_PROJECTION;3233if matches!(34self.options.parallel,35ParallelStrategy::Auto | ParallelStrategy::Prefiltered36) {37capabilities |= RC::FULL_FILTER;38}39capabilities40}4142fn build_file_reader(43&self,44source: ScanSource,45cloud_options: Option<Arc<CloudOptions>>,46scan_source_idx: usize,47) -> Box<dyn FileReader> {48let scan_source = source;49let config = self.options.clone();50let verbose = config::verbose();5152let byte_source_builder = if scan_source.is_cloud_url() || config::force_async() {53DynByteSourceBuilder::ObjectStore54} else {55DynByteSourceBuilder::Mmap56};5758let reader = ParquetFileReader {59scan_source,60cloud_options,61config,62metadata: if scan_source_idx == 0 {63self.first_metadata.clone()64} else {65None66},67byte_source_builder,68verbose,6970init_data: None,71};7273Box::new(reader) as Box<dyn FileReader>74}75}767778