19 #include <cudf/io/detail/orc.hpp>
23 #include <cudf/utilities/export.hpp>
29 #include <unordered_map>
33 namespace CUDF_EXPORT
cudf {
57 std::optional<std::vector<std::string>> _columns;
60 std::vector<std::vector<size_type>> _stripes;
62 int64_t _skip_rows = 0;
64 std::optional<int64_t> _num_rows;
67 bool _use_index =
true;
70 bool _use_np_dtypes =
true;
72 data_type _timestamp_type{type_id::EMPTY};
75 std::vector<std::string> _decimal128_columns;
115 [[nodiscard]]
auto const&
get_columns()
const {
return _columns; }
122 [[nodiscard]]
auto const&
get_stripes()
const {
return _stripes; }
129 [[nodiscard]] int64_t
get_skip_rows()
const {
return _skip_rows; }
138 [[nodiscard]] std::optional<int64_t>
const&
get_num_rows()
const {
return _num_rows; }
166 return _decimal128_columns;
178 void set_columns(std::vector<std::string> col_names) { _columns = std::move(col_names); }
191 void set_stripes(std::vector<std::vector<size_type>> stripes)
193 CUDF_EXPECTS(stripes.empty() or (_skip_rows == 0),
"无法同时设置条带和跳过的行数");
194 CUDF_EXPECTS(stripes.empty() or not _num_rows.has_value(),
196 _stripes = std::move(stripes);
209 CUDF_EXPECTS(rows == 0 or _stripes.empty(),
"无法同时设置 skip_rows 和条带");
256 _decimal128_columns = std::move(val);
289 options._columns = std::move(col_names);
337 options._use_index = use;
350 options._use_np_dtypes = use;
361 options._timestamp_type = type;
373 options._decimal128_columns = std::move(val);
485 std::size_t chunk_read_limit,
486 std::size_t pass_read_limit,
505 std::size_t chunk_read_limit,
506 std::size_t pass_read_limit,
523 std::size_t chunk_read_limit,
539 [[nodiscard]]
bool has_next()
const;
549 std::unique_ptr<cudf::io::orc::detail::chunked_reader> reader;
594 std::optional<table_input_metadata> _metadata;
596 std::map<std::string, std::string> _user_data;
598 std::shared_ptr<writer_compression_statistics> _compression_stats;
600 bool _enable_dictionary_sort =
true;
613 : _sink(std::move(sink)), _table(std::move(
table))
684 auto const unaligned_stride = std::min(_row_index_stride, get_stripe_size_rows());
685 return unaligned_stride - unaligned_stride % 8;
701 [[nodiscard]]
auto const&
get_metadata()
const {
return _metadata; }
719 return _compression_stats;
741 if (comp == compression_type::AUTO) { _compression = compression_type::SNAPPY; }
1043 std::optional<table_input_metadata> _metadata;
1045 std::map<std::string, std::string> _user_data;
1047 std::shared_ptr<writer_compression_statistics> _compression_stats;
1049 bool _enable_dictionary_sort =
true;
1119 auto const unaligned_stride = std::min(_row_index_stride, get_stripe_size_rows());
1120 return unaligned_stride - unaligned_stride % 8;
1147 return _compression_stats;
1166 _compression = comp;
1167 if (comp == compression_type::AUTO) { _compression = compression_type::SNAPPY; }
1192 _stripe_size_bytes = size_bytes;
1208 _stripe_size_rows = size_rows;
1223 _row_index_stride = stride;
1240 _user_data = std::move(metadata);
1250 _compression_stats = std::move(comp_stats);
1307 options._stats_freq = val;
1355 options._metadata = std::move(meta);
1366 std::map<std::string, std::string> metadata)
1368 options._user_data = std::move(metadata);
1379 std::shared_ptr<writer_compression_statistics>
const& comp_stats)
1381 options._compression_stats = comp_stats;
1393 options._enable_dictionary_sort = val;
用于将 ORC 文件迭代读取到一系列表中的分块 ORC 读取器类,...
chunked_orc_reader(std::size_t chunk_read_limit, orc_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())
根据输出大小限制以及其他 ORC 读取器选项构造读取器。
bool has_next() const
检查给定数据源中是否有尚未读取的数据。
chunked_orc_reader(std::size_t chunk_read_limit, std::size_t pass_read_limit, orc_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())
根据输入/输出大小限制以及其他 ORC 读取器选项构造读取器。
~chunked_orc_reader()
析构函数,销毁内部读取器实例。
table_with_metadata read_chunk() const
读取给定数据源中的一行数据块。
chunked_orc_reader(std::size_t chunk_read_limit, std::size_t pass_read_limit, size_type output_row_granularity, orc_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())
根据输入/输出大小限制、输出行粒度以及其他 ORC 读取...
chunked_orc_reader()
默认构造函数,不应使用。
构建用于 write_orc_chunked() 的设置。
chunked_orc_writer_options_builder & enable_dictionary_sort(bool val)
设置字符串字典是否应排序。
chunked_orc_writer_options && build()
构建完成后移动 chunked_orc_writer_options 成员。
chunked_orc_writer_options_builder & stripe_size_bytes(size_t val)
设置最大条带大小(以字节为单位)。
chunked_orc_writer_options_builder()=default
默认构造函数。
chunked_orc_writer_options_builder & stripe_size_rows(size_type val)
设置输出条带中的最大行数。
chunked_orc_writer_options_builder & compression_statistics(std::shared_ptr< writer_compression_statistics > const &comp_stats)
设置指向输出压缩统计信息的指针。
chunked_orc_writer_options_builder & key_value_metadata(std::map< std::string, std::string > metadata)
设置键值页脚元数据。
chunked_orc_writer_options_builder & compression(compression_type comp)
设置压缩类型。
chunked_orc_writer_options_builder & metadata(table_input_metadata meta)
设置相关元数据。
chunked_orc_writer_options_builder(sink_info const &sink)
从 sink 和表构造。
chunked_orc_writer_options_builder & enable_statistics(statistics_freq val)
选择统计信息收集的粒度。
chunked_orc_writer_options_builder & row_index_stride(size_type val)
设置行索引步长。
用于 write_orc_chunked() 的设置。
void set_stripe_size_bytes(size_t size_bytes)
设置最大条带大小(以字节为单位)。
chunked_orc_writer_options()=default
默认构造函数。
void metadata(table_input_metadata meta)
设置相关元数据。
void set_key_value_metadata(std::map< std::string, std::string > metadata)
设置键值页脚元数据。
void set_compression_statistics(std::shared_ptr< writer_compression_statistics > comp_stats)
设置指向输出压缩统计信息的指针。
sink_info const & get_sink() const
返回 sink info。
auto get_stripe_size_rows() const
返回最大条带大小(以行为单位)。
auto get_row_index_stride() const
返回行索引步长。
void set_row_index_stride(size_type stride)
设置行索引步长。
statistics_freq get_statistics_freq() const
返回统计信息收集的粒度。
void set_compression(compression_type comp)
设置压缩类型。
std::map< std::string, std::string > const & get_key_value_metadata() const
返回键值页脚元信息。
void set_enable_dictionary_sort(bool val)
设置字符串字典是否应排序。
auto const & get_metadata() const
返回相关元数据。
bool get_enable_dictionary_sort() const
返回字符串字典是否应排序。
compression_type get_compression() const
返回压缩类型。
void set_stripe_size_rows(size_type size_rows)
设置最大条带大小(以行为单位)。
std::shared_ptr< writer_compression_statistics > get_compression_statistics() const
返回指向用户提供的压缩统计信息的 shared pointer。
auto get_stripe_size_bytes() const
返回最大条带大小(以字节为单位)。
void enable_statistics(statistics_freq val)
选择统计信息收集的粒度。
static chunked_orc_writer_options_builder builder(sink_info const &sink)
创建用于创建 chunked_orc_writer_options 的构建器。
分块 ORC 写入器类以分块/流形式写入 ORC 文件。
~orc_chunked_writer()
虚析构函数,添加此函数是为了防止细节类型泄露。
orc_chunked_writer()
默认构造函数,不应使用。添加此函数仅为了满足 cython。
orc_chunked_writer(chunked_orc_writer_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream())
使用分块写入器选项的构造函数。
std::unique_ptr< orc::detail::writer > writer
指向 impl 写入器类的唯一指针。
orc_chunked_writer & write(table_view const &table)
将表写入输出。
orc_reader_options_builder & use_index(bool use)
启用/禁用使用行索引来加速读取。
orc_reader_options_builder & decimal128_columns(std::vector< std::string > val)
应读取为 128 位 Decimal 的列。
orc_reader_options_builder & use_np_dtypes(bool use)
启用/禁用使用与 numpy 兼容的 dtype。
orc_reader_options_builder & skip_rows(int64_t rows)
设置从开头跳过的行数。
orc_reader_options_builder()=default
默认构造函数。
orc_reader_options_builder(source_info src)
从 source info 构造。
orc_reader_options_builder & stripes(std::vector< std::vector< size_type >> stripes)
设置每个源要读取的各个条带列表。
orc_reader_options_builder & num_rows(int64_t nrows)
设置要读取的行数。
orc_reader_options_builder & columns(std::vector< std::string > col_names)
设置要读取的列的名称。
orc_reader_options && build()
构建完成后移动 orc_reader_options 成员。
orc_reader_options_builder & timestamp_type(data_type type)
设置时间戳列将被转换为的时间戳类型。
int64_t get_skip_rows() const
返回从开头跳过的行数。
orc_reader_options()=default
默认构造函数。
void enable_use_np_dtypes(bool use)
启用/禁用使用与 numpy 兼容的 dtype。
void set_num_rows(int64_t nrows)
设置要读取的行数。
auto const & get_stripes() const
返回向量的向量,即每个输入源要读取的条带。
void set_decimal128_columns(std::vector< std::string > val)
设置应读取为 128 位 Decimal 的列。
void set_skip_rows(int64_t rows)
设置从开头跳过的行数。
void enable_use_index(bool use)
启用/禁用使用行索引来加速读取。
void set_columns(std::vector< std::string > col_names)
设置要读取的列的名称。
void set_stripes(std::vector< std::vector< size_type >> stripes)
设置每个输入源要读取的条带列表。
data_type get_timestamp_type() const
返回时间戳列将被转换为的时间戳类型。
auto const & get_columns() const
返回要读取的列的名称(如果已设置)。
static orc_reader_options_builder builder(source_info src)
创建将构建 orc_reader_options 的 orc_reader_options_builder。
std::optional< int64_t > const & get_num_rows() const
返回要读取的行数。
source_info const & get_source() const
返回 source info。
bool is_enabled_use_np_dtypes() const
是否使用与 numpy 兼容的 dtype。
bool is_enabled_use_index() const
是否使用行索引来加速读取。
std::vector< std::string > const & get_decimal128_columns() const
返回应读取为 128 位 Decimal 的列的完全限定名称。
void set_timestamp_type(data_type type)
设置时间戳列将被转换为的时间戳类型。
orc_writer_options_builder & table(table_view tbl)
设置要写入输出的表。
orc_writer_options_builder & row_index_stride(size_type val)
设置行索引步长。
orc_writer_options_builder & enable_statistics(statistics_freq val)
选择要写入的列统计信息的粒度。
orc_writer_options_builder & metadata(table_input_metadata meta)
设置相关元数据。
orc_writer_options_builder(sink_info const &sink, table_view const &table)
从 sink 和表构造。
orc_writer_options && build()
构建完成后移动 orc_writer_options 成员。
orc_writer_options_builder()=default
默认构造函数。
orc_writer_options_builder & key_value_metadata(std::map< std::string, std::string > metadata)
设置键值页脚元数据。
orc_writer_options_builder & compression_statistics(std::shared_ptr< writer_compression_statistics > const &comp_stats)
设置指向输出压缩统计信息的指针。
orc_writer_options_builder & stripe_size_rows(size_type val)
设置输出条带中的最大行数。
orc_writer_options_builder & enable_dictionary_sort(bool val)
设置字符串字典是否应排序。
orc_writer_options_builder & compression(compression_type comp)
设置压缩类型。
orc_writer_options_builder & stripe_size_bytes(size_t val)
设置最大条带大小(以字节为单位)。
void enable_statistics(statistics_freq val)
选择统计信息收集的粒度。
auto const & get_metadata() const
返回相关元数据。
std::map< std::string, std::string > const & get_key_value_metadata() const
返回键值页脚元信息。
std::shared_ptr< writer_compression_statistics > get_compression_statistics() const
返回指向用户提供的压缩统计信息的 shared pointer。
bool is_enabled_statistics() const
是否启用/禁用写入列统计信息。
auto get_stripe_size_bytes() const
返回最大条带大小(以字节为单位)。
void set_stripe_size_rows(size_type size_rows)
设置最大条带大小(以行为单位)。
void set_key_value_metadata(std::map< std::string, std::string > metadata)
设置元数据。
auto get_stripe_size_rows() const
返回最大条带大小(以行为单位)。
table_view get_table() const
返回要写入输出的表。
void set_metadata(table_input_metadata meta)
设置相关元数据。
statistics_freq get_statistics_freq() const
返回统计信息收集的频率。
void set_compression_statistics(std::shared_ptr< writer_compression_statistics > comp_stats)
设置指向输出压缩统计信息的指针。
auto get_row_index_stride() const
返回行索引步长。
void set_table(table_view tbl)
设置要写入输出的表。
orc_writer_options()=default
默认构造函数。
void set_compression(compression_type comp)
设置压缩类型。
void set_enable_dictionary_sort(bool val)
设置字符串字典是否应排序。
void set_row_index_stride(size_type stride)
设置行索引步长。
compression_type get_compression() const
返回压缩类型。
static orc_writer_options_builder builder(sink_info const &sink, table_view const &table)
创建用于创建 orc_writer_options 的构建器。
bool get_enable_dictionary_sort() const
返回字符串字典是否应排序。
void set_stripe_size_bytes(size_t size_bytes)
设置最大条带大小(以字节为单位)。
sink_info const & get_sink() const
返回 sink info。
一组大小相同的 cudf::column_view。
rmm::cuda_stream_view const get_default_stream()
获取当前默认流。
constexpr size_type default_stripe_size_rows
默认 ORC 条带行数为 100 万行
constexpr size_type default_row_index_stride
默认 ORC 行索引步长为 1 万行
table_with_metadata read_orc(orc_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())
将 ORC 数据集读取到一组列中。
constexpr size_t default_stripe_size_bytes
默认 ORC 条带大小为 64MB
statistics_freq
parquet/orc 写入器的列统计信息粒度类型。
@ STATISTICS_ROWGROUP
每行组的列统计信息。
@ STATISTICS_PAGE
每页的列统计信息。
void write_orc(orc_writer_options const &options, rmm::cuda_stream_view stream=cudf::get_default_stream())
将一组列写入 ORC 格式。
rmm::device_async_resource_ref get_current_device_resource_ref()
获取当前设备内存资源的引用。
cuda::mr::async_resource_ref< cuda::mr::device_accessible > device_async_resource_ref
#define CUDF_EXPECTS(...)
用于检查(前置)条件的宏,当条件被违反时抛出异常。
int32_t size_type
列和表的行索引类型。
(mutable)_table_view 的类定义