Experimental#
APIs in this namespace are experimental and may change without warning in the future.
- class pylibcudf.io.experimental.FileMetaData#
Parquet file footer metadata.
For details, see
cudf::io::parquet::FileMetaDataAttributes
FileMetaData.columnchunk_metadata: dict[str, list[int]]
FileMetaData.created_by: str
FileMetaData.num_rows: int
FileMetaData.row_group_num_rows: list[int]
FileMetaData.row_groups: list[RowGroup]
FileMetaData.version: int
Methods
from_bytes(cls, const uint8_t[)Build
FileMetaDatafrom parquet footer bytes.See also
pylibcudf.io.parquet_metadata.read_parquet_footersRead one
FileMetaDataper source directly frompylibcudf.io.types.SourceInfo.
- columnchunk_metadata#
FileMetaData.columnchunk_metadata: dict[str, list[int]]
Get a map of dotted column paths to lists of total_uncompressed_size values from every column chunk in this file.
- Returns:
- dict[str, list[int]]
Map of dotted column paths (
".".join(path_in_schema)) to lists of total_uncompressed_size metadata from all their column chunks.
Notes
Equivalent to, but faster than, walking each row group’s columns:
>>> result: dict[str, list[int]] = {} >>> for rg in file_metadata.row_groups: ... for col in rg.columns: ... name = ".".join(col.meta_data.path_in_schema) ... result.setdefault(name, []).append( ... col.meta_data.total_uncompressed_size ... )
- created_by#
FileMetaData.created_by: str
Get the application that created the file.
- classmethod from_bytes(
- cls,
- const uint8_t[::1] footer_bytes: Buffer,
Build
FileMetaDatafrom parquet footer bytes.- Parameters:
- footer_bytesBuffer
A contiguous bytes-like object containing parquet footer bytes. The bytes are forwarded as-is to
cudf::io::parquet::experimental::hybrid_scan_readerwithout Python-side preprocessing. This method does not strip the parquet footer suffix (4-byte footer length +PAR1magic), so callers should generally pass only the footer region bytes.
- Returns:
- FileMetaData
Parsed parquet file footer metadata.
- num_rows#
FileMetaData.num_rows: int
Get the total number of rows.
- row_group_num_rows#
FileMetaData.row_group_num_rows: list[int]
Get row counts for each row group in this file.
- Returns:
- list
A list with the row count per row group in this file.
Notes
Equivalent to, but faster than, checking each row groups’ num_rows:
>>> [rg.num_rows for rg in file_metadata.row_groups]
- row_groups#
FileMetaData.row_groups: list[RowGroup]
Get row group metadata in this file.
- version#
FileMetaData.version: int
Get the file format version.
- class pylibcudf.io.experimental.HybridScanMetadata#
Shareable, pre-parsed Parquet file metadata for the hybrid scan reader.
This class enables parsing the metadata of a Parquet file once, then constructing multiple
HybridScanReaderinstances that share it (one per row-group range of the file) instead of each re-parsing and copying the metadata.For details, see
cudf::io::parquet::experimental::hybrid_scan_metadataMethods
from_footer_bytes(const uint8_t[, ...)Parse shareable metadata from Parquet footer bytes.
from_parquet_metadata(FileMetaData metadata, ...)Build shareable metadata from a pre-populated
FileMetaData.Examples
>>> import pylibcudf as plc >>> metadata = plc.io.experimental.HybridScanMetadata.from_parquet_metadata( ... file_metadata, options) >>> reader = plc.io.experimental.HybridScanReader.from_metadata(metadata)
- const uint8_t[::1] footer_bytes,
- ParquetReaderOptions options,
Parse shareable metadata from Parquet footer bytes.
- Parameters:
- footer_bytesBuffer
Parquet file footer bytes
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- HybridScanMetadata
- static from_parquet_metadata(
- FileMetaData metadata,
- ParquetReaderOptions options,
Build shareable metadata from a pre-populated
FileMetaData.- Parameters:
- metadataFileMetaData
Pre-populated Parquet file metadata
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- HybridScanMetadata
- class pylibcudf.io.experimental.HybridScanReader(
- const uint8_t[::1] footer_bytes,
- ParquetReaderOptions options,
Experimental Parquet reader optimized for highly selective filters.
This class implements a hybrid scan operation for reading Parquet files with highly selective filters. It reads in two passes: first reading filter columns to build a row mask, then reading payload columns using that mask for optimization.
For details, see
cudf::io::parquet::experimental::hybrid_scan_reader- Parameters:
- footer_bytesBuffer
Parquet file footer bytes
- optionsParquetReaderOptions
Parquet reader options
Methods
all_column_chunks_byte_ranges(self, ...)Get byte ranges of column chunks of all columns.
all_row_groups(self, ...)Get all available row groups from the parquet file.
build_all_true_row_mask(self, ...[, stream])Build an all-true boolean survival column for the given row groups.
build_row_mask_with_page_index_stats(self, ...)Build a boolean column indicating surviving rows from page stats.
construct_row_group_passes(self, ...)Partition row groups into passes such that the GPU memory required to materialize a pass is bounded by the specified limit.
filter_column_chunks_byte_ranges(self, ...)Get byte ranges of column chunks of filter columns.
filter_row_groups_with_bloom_filters(self, ...)Filter row groups using column chunk bloom filters.
Filter row groups using column chunk dictionary pages.
filter_row_groups_with_stats(self, ...)Filter row groups using column chunk statistics.
from_metadata(HybridScanMetadata metadata)Create a HybridScanReader that shares pre-parsed metadata.
from_parquet_metadata(FileMetaData metadata, ...)Create a HybridScanReader from pre-populated metadata.
has_next_table_chunk(self)Check if there is any parquet data left to read.
materialize_all_columns(self, ...)Materialize all columns.
materialize_filter_columns(self, ...)Materialize filter columns and update the row mask.
materialize_filter_columns_chunk(self, ...)Materialize a chunk of filter columns.
materialize_payload_columns(self, ...)Materialize payload columns and apply the row mask.
materialize_payload_columns_chunk(self, ...)Materialize a chunk of payload columns.
page_index_byte_range(self)Get the byte range of the page index.
parquet_metadata(self)Get the Parquet file footer metadata.
payload_column_chunks_byte_ranges(self, ...)Get byte ranges of column chunks of payload columns.
reset_column_selection(self)Reset the column selection state.
secondary_filters_byte_ranges(self, ...)Get byte ranges of bloom filters and dictionary pages.
setup_chunking_for_filter_columns(self, ...)Setup chunking information for filter columns.
setup_chunking_for_payload_columns(self, ...)Setup chunking information for payload columns.
setup_page_index(self, const uint8_t[)Setup the page index within the Parquet file metadata.
total_rows_in_row_groups(self, ...)Get the total number of top-level rows in the row groups.
Examples
>>> import pylibcudf as plc >>> # Create reader from footer bytes >>> reader = plc.io.hybrid_scan.HybridScanReader(footer_bytes, options) >>> # Get metadata >>> metadata = reader.parquet_metadata() >>> # Get all row groups >>> row_groups = reader.all_row_groups(options)
- all_column_chunks_byte_ranges(self, list row_group_indices: list[int], ParquetReaderOptions options) list[ByteRangeInfo]#
Get byte ranges of column chunks of all columns.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- list[ByteRangeInfo]
Byte ranges to column chunks of all columns
- all_row_groups(
- self,
- ParquetReaderOptions options,
Get all available row groups from the parquet file.
- Parameters:
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- list[int]
List of row group indices
- build_all_true_row_mask(
- self,
- list row_group_indices,
- stream=None,
- DeviceMemoryResource mr=None,
Build an all-true boolean survival column for the given row groups.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- Returns:
- Column
All-true boolean column with one entry per row across all row groups
- build_row_mask_with_page_index_stats(self, list row_group_indices: list[int], ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) Column#
Build a boolean column indicating surviving rows from page stats.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- Returns:
- Column
Boolean column indicating surviving rows
- construct_row_group_passes(self, list row_group_indices: list[int], size_t pass_read_limit) list[list[int]]#
Partition row groups into passes such that the GPU memory required to materialize a pass is bounded by the specified limit.
Note that
pass_read_limitis a hint, not an absolute limit. i.e. if a row group cannot fit within the limit, it will still constitute a valid pass.- Parameters:
- row_group_indiceslist[int]
Input row group indices
- pass_read_limitint
Limit on the amount of memory used for reading and decompressing data
- or 0 if there is no limit.
- Returns:
- list[list[int]]
Lists of row group indices, one per pass.
- Raises:
- ValueError
If
row_group_indicesis empty.
- filter_column_chunks_byte_ranges(self, list row_group_indices: list[int], ParquetReaderOptions options) list[ByteRangeInfo]#
Get byte ranges of column chunks of filter columns.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- list[ByteRangeInfo]
Byte ranges to column chunks of filter columns
- filter_row_groups_with_bloom_filters(self, list bloom_filter_data, list row_group_indices: list[int], ParquetReaderOptions options, stream: CudaStreamLike | None = None) list[int]#
Filter row groups using column chunk bloom filters.
- Parameters:
- bloom_filter_dataSequence
Span-like objects containing bloom filter data
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- Returns:
- list[int]
Filtered row group indices
- filter_row_groups_with_dictionary_pages(self, list dictionary_page_data, list row_group_indices: list[int], ParquetReaderOptions options, stream: CudaStreamLike | None = None) list[int]#
Filter row groups using column chunk dictionary pages.
- Parameters:
- dictionary_page_dataSequence
Span-like objects containing dictionary page data
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- Returns:
- list[int]
Filtered row group indices
- filter_row_groups_with_stats(self, list row_group_indices: list[int], ParquetReaderOptions options, stream: CudaStreamLike | None = None) list[int]#
Filter row groups using column chunk statistics.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- Returns:
- list[int]
Filtered row group indices
- static from_metadata(HybridScanMetadata metadata)#
Create a HybridScanReader that shares pre-parsed metadata.
Constructs a lightweight reader that borrows
metadatainstead of re-parsing and copying the file metadata. Use one sharedHybridScanMetadatato read row-group ranges of a single file. Overlapping row-group ranges across readers produce duplicate rows.- Parameters:
- metadataHybridScanMetadata
Shared, pre-parsed Parquet file metadata
- Returns:
- HybridScanReader
- static from_parquet_metadata(
- FileMetaData metadata,
- ParquetReaderOptions options,
Create a HybridScanReader from pre-populated metadata.
- Parameters:
- metadataFileMetaData
Pre-populated Parquet file metadata
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- HybridScanReader
- has_next_table_chunk(self) bool#
Check if there is any parquet data left to read.
- Returns:
- bool
True if there is data left to read
- materialize_all_columns(self, list row_group_indices: list[int], list column_chunk_data, ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) TableWithMetadata#
Materialize all columns.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- column_chunk_dataSequence
Span-like objects containing column chunk data of all columns
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- Returns:
- TableWithMetadata
Table of materialized all columns and metadata
- materialize_filter_columns(self, list row_group_indices: list[int], list column_chunk_data, Column row_mask, use_data_page_mask mask_data_pages, ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) TableWithMetadata#
Materialize filter columns and update the row mask.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- column_chunk_dataSequence
Span-like objects containing column chunk data of filter columns
- row_maskColumn
Mutable boolean column indicating surviving rows
- mask_data_pagesUseDataPageMask
Whether to use a data page mask
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- Returns:
- TableWithMetadata
Table of materialized filter columns and metadata
- materialize_filter_columns_chunk(
- self,
- Column row_mask,
Materialize a chunk of filter columns.
- Parameters:
- row_maskColumn
Mutable boolean column indicating surviving rows
- Returns
- ——-
- TableWithMetadata
Table chunk of materialized filter columns and metadata
- materialize_payload_columns(self, list row_group_indices: list[int], list column_chunk_data, Column row_mask, use_data_page_mask mask_data_pages, ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) TableWithMetadata#
Materialize payload columns and apply the row mask.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- column_chunk_dataSequence
Span-like objects containing column chunk data of payload columns
- row_maskColumn
Boolean column indicating surviving rows
- mask_data_pagesUseDataPageMask
Whether to use a data page mask
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- Returns:
- TableWithMetadata
Table of materialized payload columns and metadata
- materialize_payload_columns_chunk(
- self,
- Column row_mask,
Materialize a chunk of payload columns.
- Parameters:
- row_maskColumn
Boolean column indicating surviving rows
- Returns
- ——-
- TableWithMetadata
Table chunk of materialized payload columns and metadata
- page_index_byte_range(self) ByteRangeInfo#
Get the byte range of the page index.
- Returns:
- ByteRangeInfo
Byte range of the page index
- parquet_metadata(self) FileMetaData#
Get the Parquet file footer metadata.
- Returns:
- FileMetaData
Parquet file footer metadata
- payload_column_chunks_byte_ranges(self, list row_group_indices: list[int], ParquetReaderOptions options) list[ByteRangeInfo]#
Get byte ranges of column chunks of payload columns.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- list[ByteRangeInfo]
Byte ranges to column chunks of payload columns
- reset_column_selection(self) None#
Reset the column selection state.
Resets the internal column selection state forcing re-selection of columns in subsequent filter and read operations
- secondary_filters_byte_ranges(self, list row_group_indices: list[int], ParquetReaderOptions options) tuple[list[ByteRangeInfo], list[ByteRangeInfo]]#
Get byte ranges of bloom filters and dictionary pages.
- Parameters:
- row_group_indiceslist[int]
Input row group indices
- optionsParquetReaderOptions
Parquet reader options
- Returns:
- tuple[list[ByteRangeInfo], list[ByteRangeInfo]]
Tuple of (bloom_filter_ranges, dictionary_page_ranges)
- setup_chunking_for_filter_columns(self, size_t chunk_read_limit, size_t pass_read_limit, list row_group_indices: list[int], Column row_mask, use_data_page_mask mask_data_pages, column_chunk_data, ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) None#
Setup chunking information for filter columns.
- Parameters:
- chunk_read_limitint
Limit on bytes returned per chunk (0 for no limit)
- pass_read_limitint
Limit on memory for reading/decompressing (0 for no limit)
- row_group_indiceslist[int]
Input row group indices
- row_maskColumn
Boolean column indicating surviving rows
- mask_data_pagesUseDataPageMask
Whether to use a data page mask
- column_chunk_dataSequence
Span-like objects containing column chunk data of filter columns
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- setup_chunking_for_payload_columns(self, size_t chunk_read_limit, size_t pass_read_limit, list row_group_indices: list[int], Column row_mask, use_data_page_mask mask_data_pages, column_chunk_data, ParquetReaderOptions options, stream: CudaStreamLike | None = None, DeviceMemoryResource mr=None) None#
Setup chunking information for payload columns.
- Parameters:
- chunk_read_limitint
Limit on bytes returned per chunk (0 for no limit)
- pass_read_limitint
Limit on memory for reading/decompressing (0 for no limit)
- row_group_indiceslist[int]
Input row group indices
- row_maskColumn
Boolean column indicating surviving rows
- mask_data_pagesUseDataPageMask
Whether to use a data page mask
- column_chunk_dataSequence
Span-like objects containing column chunk data of payload columns
- optionsParquetReaderOptions
Parquet reader options
- streamStream, optional
CUDA stream
- mrDeviceMemoryResource, optional
Device memory resource
- pylibcudf.io.experimental.UseDataPageMask#
See also
use_data_page_mask.Enum members
YESNO