20 #include <cudf/io/detail/parquet.hpp>
24 #include <cudf/utilities/export.hpp>
34 namespace CUDF_EXPORT
cudf {
43 std::numeric_limits<size_t>::max();
63 std::optional<std::vector<std::string>> _columns;
66 std::vector<std::vector<size_type>> _row_groups;
68 int64_t _skip_rows = 0;
70 std::optional<size_type> _num_rows;
73 std::optional<std::reference_wrapper<ast::expression const>> _filter;
76 bool _convert_strings_to_categories =
false;
78 bool _use_pandas_metadata =
true;
80 bool _use_arrow_schema =
true;
82 bool _allow_mismatched_pq_schemas =
false;
84 data_type _timestamp_type{type_id::EMPTY};
86 std::optional<std::vector<reader_column_schema>> _reader_column_schema;
128 return _convert_strings_to_categories;
154 return _allow_mismatched_pq_schemas;
164 return _reader_column_schema;
180 [[nodiscard]] std::optional<size_type>
const&
get_num_rows()
const {
return _num_rows; }
187 [[nodiscard]]
auto const&
get_columns()
const {
return _columns; }
201 [[nodiscard]]
auto const&
get_filter()
const {
return _filter; }
215 void set_columns(std::vector<std::string> col_names) { _columns = std::move(col_names); }
294 _reader_column_schema = std::move(val);
349 options._columns = std::move(col_names);
383 options._convert_strings_to_categories = val;
395 options._use_pandas_metadata = val;
407 options._use_arrow_schema = val;
422 options._allow_mismatched_pq_schemas = val;
434 options._reader_column_schema = std::move(val);
470 options._timestamp_type = type;
547 std::size_t chunk_read_limit,
573 std::size_t chunk_read_limit,
574 std::size_t pass_read_limit,
604 std::unique_ptr<cudf::io::parquet::detail::chunked_reader> reader;
617 bool is_descending{
false};
618 bool is_nulls_first{
true};
632 std::optional<table_input_metadata> _metadata;
634 std::vector<std::map<std::string, std::string>> _user_data;
637 bool _write_timestamps_as_int96 =
false;
640 bool _write_timestamps_as_UTC =
true;
1171 operator OptionsT&&();
1192 std::vector<partition_info> _partitions;
1194 std::vector<std::string> _column_chunks_file_paths;
1243 [[nodiscard]] std::vector<partition_info>
const&
get_partitions()
const {
return _partitions; }
1252 return _column_chunks_file_paths;
1277 parquet_writer_options> {
1342 std::vector<std::unique_ptr<std::vector<uint8_t>>>
const& metadata_list);
1382 chunked_parquet_writer_options> {
1453 std::vector<partition_info>
const& partitions = {});
1463 std::unique_ptr<std::vector<uint8_t>>
close(
1464 std::vector<std::string>
const& column_chunks_file_paths = {});
1467 std::unique_ptr<parquet::detail::writer>
writer;
用于将 Parquet 文件迭代读取到一系列表格的 chunked parquet reader 类,...
table_with_metadata read_chunk() const
读取给定 Parquet 文件中的行块。
bool has_next() const
检查给定文件中是否有尚未读取的数据。
chunked_parquet_reader(std::size_t chunk_read_limit, std::size_t pass_read_limit, parquet_reader_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
分块读取器构造函数。
chunked_parquet_reader(std::size_t chunk_read_limit, parquet_reader_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
分块读取器构造函数。
~chunked_parquet_reader()
析构函数,销毁内部读取器实例。
chunked_parquet_reader()
默认构造函数,不应使用。
用于构建 chunked_parquet_writer_options 的类。
chunked_parquet_writer_options_builder()=default
默认构造函数。
chunked_parquet_writer_options_builder(sink_info const &sink)
从 sink 构造。
parquet_chunked_writer 的设置。
static chunked_parquet_writer_options_builder builder(sink_info const &sink)
创建用于构建 chunked_parquet_writer_options 的构建器。
chunked_parquet_writer_options()=default
默认构造函数。
分块 parquet 写入器类,用于处理选项并分块写入表格。
std::unique_ptr< std::vector< uint8_t > > close(std::vector< std::string > const &column_chunks_file_paths={})
完成分块/流式写入过程。
parquet_chunked_writer()
默认构造函数,不应使用。添加此构造函数仅为满足 cython。...。
~parquet_chunked_writer()
默认析构函数。添加此析构函数是为了不泄露 detail API。
std::unique_ptr< parquet::detail::writer > writer
指向 impl writer 类的唯一指针。
parquet_chunked_writer & write(table_view const &table, std::vector< partition_info > const &partitions={})
将表格写入输出。
parquet_chunked_writer(chunked_parquet_writer_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream())
带有分块写入器选项的构造函数。
构建用于 read_parquet() 的 parquet_reader_options。
parquet_reader_options_builder & use_arrow_schema(bool val)
设置是否启用/禁用使用 arrow schema 进行读取。
parquet_reader_options_builder(source_info src)
从 source info 构造。
parquet_reader_options_builder & skip_rows(int64_t val)
设置要跳过的行数。
parquet_reader_options_builder & allow_mismatched_pq_schemas(bool val)
设置是否启用/禁用从不匹配的 Parquet 源读取匹配的投影列和过滤列...。
parquet_reader_options_builder & columns(std::vector< std::string > col_names)
设置要读取的列的名称。
parquet_reader_options_builder & timestamp_type(data_type type)
用于转换时间戳列的 timestamp_type。
parquet_reader_options_builder & use_pandas_metadata(bool val)
设置是否启用/禁用使用 pandas metadata 进行读取。
parquet_reader_options_builder()=default
默认构造函数。
parquet_reader_options_builder & row_groups(std::vector< std::vector< size_type >> row_groups)
设置要读取的单个行组向量。
parquet_reader_options_builder & set_column_schema(std::vector< reader_column_schema > val)
设置读取器元数据。
parquet_reader_options && build()
构建完成后移动 parquet_reader_options 成员。
parquet_reader_options_builder & filter(ast::expression const &filter)
设置基于 AST 的过滤器用于谓词下推。
parquet_reader_options_builder & num_rows(size_type val)
设置要读取的行数。
parquet_reader_options_builder & convert_strings_to_categories(bool val)
设置是否启用/禁用将字符串转换为 categorical 类型。
data_type get_timestamp_type() const
返回用于转换时间戳列的时间戳类型。
parquet_reader_options()=default
默认构造函数。
static parquet_reader_options_builder builder(source_info src)
创建将构建 parquet_reader_options 的 parquet_reader_options_builder。
void enable_allow_mismatched_pq_schemas(bool val)
设置是否启用/禁用从不匹配的 Parquet 源读取匹配的投影列和过滤列...。
void set_skip_rows(int64_t val)
设置要跳过的行数。
void set_columns(std::vector< std::string > col_names)
设置要读取的列的名称。
void enable_convert_strings_to_categories(bool val)
设置是否启用/禁用将字符串转换为 categorical 类型。
std::optional< std::vector< reader_column_schema > > get_column_schema() const
返回可选的元数据树。
source_info const & get_source() const
返回 source info。
auto const & get_row_groups() const
返回要读取的单个行组列表。
std::optional< size_type > const & get_num_rows() const
返回要读取的行数。
void set_row_groups(std::vector< std::vector< size_type >> row_groups)
设置要读取的单个行组向量。
void set_num_rows(size_type val)
设置要读取的行数。
auto const & get_columns() const
如果已设置,则返回要读取的列的名称。
void set_timestamp_type(data_type type)
设置用于转换时间戳列的 timestamp_type。
bool is_enabled_convert_strings_to_categories() const
根据是否应将字符串转换为 categorical 类型返回 true/false。
void enable_use_pandas_metadata(bool val)
设置是否启用/禁用使用 pandas metadata 进行读取。
void enable_use_arrow_schema(bool val)
设置是否启用/禁用使用 arrow schema 进行读取。
bool is_enabled_use_pandas_metadata() const
根据读取时是否使用 pandas metadata 返回 true/false。
bool is_enabled_allow_mismatched_pq_schemas() const
根据是否从不匹配的源 Parquet 文件读取匹配的投影列和过滤列返回 true/false...。
void set_column_schema(std::vector< reader_column_schema > val)
设置读取器列 schema。
bool is_enabled_use_arrow_schema() const
根据读取时是否使用 arrow schema 返回 true/false。
void set_filter(ast::expression const &filter)
设置基于 AST 的过滤器用于谓词下推。
auto const & get_filter() const
返回基于 AST 的过滤器用于谓词下推。
int64_t get_skip_rows() const
返回从开始跳过的行数。
write_parquet() 和 parquet_chunked_writer 的基础设置。
void enable_utc_timestamps(bool val)
设置将时间戳写入为 UTC 的偏好。如果设置为 true,则将时间戳写入为 UTC。
void enable_write_v2_headers(bool val)
设置 V2 页头偏好。如果设置为 true,则写入 V2 页头。
auto const & get_sorting_columns() const
返回 sorting_columns。
auto get_row_group_size_bytes() const
返回最大行组大小(字节)。
bool is_enabled_int96_timestamps() const
如果时间戳将写入为 INT96,则返回 true。
void set_metadata(table_input_metadata metadata)
设置元数据。
void set_row_group_size_rows(size_type size_rows)
设置最大行组大小(行数)。
parquet_writer_options_base(sink_info sink)
从 sink 构造。
void set_stats_level(statistics_freq sf)
设置统计级别。
auto get_row_group_size_rows() const
返回最大行组大小(行数)。
parquet_writer_options_base()=default
默认构造函数。
void set_max_page_size_bytes(size_t size_bytes)
设置最大未压缩页大小(字节)。
void set_sorting_columns(std::vector< sorting_column > sorting_columns)
设置排序列。
auto is_enabled_write_arrow_schema() const
如果将写入 arrow schema,则返回 true。
auto is_enabled_write_v2_headers() const
如果应写入 V2 页头,则返回 true。
void set_dictionary_policy(dictionary_policy policy)
设置字典使用策略。
auto get_max_page_size_bytes() const
返回最大未压缩页大小(字节)。
void set_max_dictionary_size(size_t size_bytes)
设置最大字典大小(字节)。
compression_type get_compression() const
返回使用的压缩格式。
auto get_max_dictionary_size() const
返回最大字典大小(字节)。
void set_compression(compression_type compression)
设置压缩类型。
dictionary_policy get_dictionary_policy() const
返回字典使用策略。
void set_compression_statistics(std::shared_ptr< writer_compression_statistics > comp_stats)
设置指向输出压缩统计信息的指针。
std::shared_ptr< writer_compression_statistics > get_compression_statistics() const
返回指向用户提供的压缩统计信息的共享指针。
void set_max_page_size_rows(size_type size_rows)
设置最大页大小(行数)。
auto get_max_page_fragment_size() const
返回最大页片段大小(行数)。
void set_key_value_metadata(std::vector< std::map< std::string, std::string >> metadata)
设置元数据。
void set_max_page_fragment_size(size_type size_rows)
设置最大页片段大小(行数)。
void enable_write_arrow_schema(bool val)
设置写入 arrow schema 的偏好。如果设置为 true,则写入 arrow schema。
auto is_enabled_utc_timestamps() const
如果时间戳将写入为 UTC,则返回 true。
void set_row_group_size_bytes(size_t size_bytes)
设置最大行组大小(字节)。
void enable_int96_timestamps(bool req)
设置时间戳写入偏好。如果为 true,则写入 INT96 时间戳;如果...。
statistics_freq get_stats_level() const
返回输出文件中请求的统计信息级别。
std::vector< std::map< std::string, std::string > > const & get_key_value_metadata() const
返回键值 footer 元数据信息。
auto const & get_metadata() const
返回关联的元数据。
auto get_max_page_size_rows() const
返回最大页大小(行数)。
auto get_column_index_truncate_length() const
返回列索引中 min 或 max 值的最大长度(字节)。
void set_column_index_truncate_length(int32_t size_bytes)
设置列索引中 min 或 max 值的最大长度(字节)。
sink_info const & get_sink() const
返回 sink info。
BuilderT & compression(compression_type compression)
设置压缩类型。
BuilderT & key_value_metadata(std::vector< std::map< std::string, std::string >> metadata)
设置键值 footer 元数据。
OptionsT & get_options()
返回正在构建的 options 对象的引用。
BuilderT & utc_timestamps(bool enabled)
如果时间戳要写入为 UTC,则设置为 true。
BuilderT & max_dictionary_size(size_t val)
设置最大字典大小(字节)。
BuilderT & max_page_size_bytes(size_t val)
设置最大未压缩页大小(字节)。
OptionsT && build()
构建完成后移动 options 成员。
BuilderT & stats_level(statistics_freq sf)
设置统计级别。
BuilderT & column_index_truncate_length(int32_t val)
设置列索引中 min 和 max 值的所需最大大小(字节)。
BuilderT & compression_statistics(std::shared_ptr< writer_compression_statistics > const &comp_stats)
设置指向输出压缩统计信息的指针。
BuilderT & metadata(table_input_metadata metadata)
设置元数据。
BuilderT & dictionary_policy(enum dictionary_policy val)
设置字典使用策略。
parquet_writer_options_builder_base(OptionsT options)
从 options 构造。
BuilderT & int96_timestamps(bool enabled)
设置是否写入 int96 时间戳。
BuilderT & row_group_size_bytes(size_t val)
设置最大行组大小(字节)。
BuilderT & sorting_columns(std::vector< sorting_column > sorting_columns)
设置列排序元数据。
BuilderT & write_arrow_schema(bool enabled)
如果要写入 arrow schema,则设置为 true。
parquet_writer_options_builder_base()=default
默认构造函数。
BuilderT & write_v2_headers(bool enabled)
如果要写入 V2 页头,则设置为 true。
BuilderT & max_page_fragment_size(size_type val)
设置最大页片段大小(行数)。
BuilderT & row_group_size_rows(size_type val)
设置输出行组中的最大行数。
BuilderT & max_page_size_rows(size_type val)
设置最大页大小(行数)。仅计算顶层行,忽略任何嵌套。...。
用于构建 parquet_writer_options 的类。
parquet_writer_options_builder(sink_info const &sink, table_view const &table)
从 sink 和 table 构造。
parquet_writer_options_builder()=default
默认构造函数。
parquet_writer_options_builder & partitions(std::vector< partition_info > partitions)
在 parquet_writer_options 中设置分区。
parquet_writer_options_builder & column_chunks_file_paths(std::vector< std::string > file_paths)
设置要在原始输出元数据中设置的列块文件路径。
void set_partitions(std::vector< partition_info > partitions)
设置分区。
static parquet_writer_options_builder builder(sink_info const &sink, table_view const &table)
创建用于创建 parquet_writer_options 的构建器。
parquet_writer_options()=default
默认构造函数。
std::vector< std::string > const & get_column_chunks_file_paths() const
返回要在原始输出元数据中设置的列块文件路径。
table_view get_table() const
返回 table_view。
void set_column_chunks_file_paths(std::vector< std::string > file_paths)
设置要在原始输出元数据中设置的列块文件路径。
static parquet_writer_options_builder builder()
创建用于创建 parquet_writer_options 的构建器。
std::vector< partition_info > const & get_partitions() const
返回分区。
一组大小相同的 cudf::column_view。
rmm::cuda_stream_view const get_default_stream()
获取当前默认流。
constexpr size_type default_row_group_size_rows
每行组 1 百万行
constexpr int32_t default_column_index_truncate_length
截断为 64 字节
constexpr size_t default_row_group_size_bytes
每行组无限字节。
constexpr size_type default_max_page_fragment_size
每页片段 5000 行
constexpr size_t default_max_dictionary_size
1MB 字典大小
table_with_metadata read_parquet(parquet_reader_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
将 Parquet 数据集读取到一组列中。
constexpr size_t default_max_page_size_bytes
每页 512KB
constexpr size_type default_max_page_size_rows
每页 20k 行
statistics_freq
parquet/orc 写入器的列统计信息粒度类型。
dictionary_policy
控制 parquet 写入器是否使用字典编码。
@ STATISTICS_ROWGROUP
每行组列统计信息。
std::unique_ptr< std::vector< uint8_t > > merge_row_group_metadata(std::vector< std::unique_ptr< std::vector< uint8_t >>> const &metadata_list)
合并之前由 write_parquet 创建的多个原始元数据 blob 到一个元数据中...。
std::unique_ptr< std::vector< uint8_t > > write_parquet(parquet_writer_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream())
将一组列写入 parquet 格式。
rmm::device_async_resource_ref get_current_device_resource_ref()
获取当前设备内存资源引用。
cuda::mr::async_resource_ref< cuda::mr::device_accessible > device_async_resource_ref
int32_t size_type
列和表的行索引类型。
(mutable)_table_view 的类定义