parquet_metadata.hpp
前往此文件的文档。
1 /*
2  * 版权所有 (c) 2023-2024, NVIDIA CORPORATION。
3  *
4  * 根据 Apache 许可,版本 2.0 ("许可") 获得许可;
5  * 除非符合许可条款,否则您不得使用此文件。
6  * 您可以获得一份许可副本,地址是
7  *
8  * https://apache.ac.cn/licenses/LICENSE-2.0
9  *
10  * 除非适用法律要求或书面同意,软件
11  * 根据许可分发,是基于“原样”分发的,
12  * 不附带任何明示或暗示的保证或条件。
13  * 请参阅许可,了解特定语言的管理权限和
14  * 许可下的限制。
15  */
16 
22 #pragma once
23 
24 #include <cudf/io/types.hpp>
25 #include <cudf/utilities/export.hpp>
26 
27 #include <optional>
28 #include <string_view>
29 #include <variant>
30 #include <vector>
31 
32 namespace CUDF_EXPORT cudf {
33 namespace io {
41 namespace parquet {
45 enum class TypeKind : int8_t {
46  UNDEFINED_TYPE = -1, // 未定义非叶子节点
47  BOOLEAN = 0,
48  INT32 = 1,
49  INT64 = 2,
50  INT96 = 3, // 已弃用
51  FLOAT = 4,
52  DOUBLE = 5,
53  BYTE_ARRAY = 6,
54  FIXED_LEN_BYTE_ARRAY = 7,
55 };
56 } // namespace parquet
57 
62  public
68  explicit parquet_column_schema() = default;
69 
77  parquet_column_schema(std::string_view name,
78  parquet::TypeKind type,
79  std::vector<parquet_column_schema> children)
80  : _name{name}, _type_kind{type}, _children{std::move(children)}
81  {
82  }
83 
89  [[nodiscard]] auto name() const { return _name; }
90 
96  [[nodiscard]] auto type_kind() const { return _type_kind; }
97 
103  [[nodiscard]] auto const& children() const& { return _children; }
104 
109  [[nodiscard]] auto children() && { return std::move(_children); }
110 
118  [[nodiscard]] auto const& child(int idx) const& { return children().at(idx); }
119 
124  [[nodiscard]] auto child(int idx) && { return std::move(children().at(idx)); }
125 
131  [[nodiscard]] auto num_children() const { return children().size(); }
132 
133  private
134  std::string _name;
135  // 可用类型有 3 种:物理、转换、逻辑。
136  parquet::TypeKind _type_kind; // 物理类型
137  std::vector<parquet_column_schema> _children;
138 };
139 
144  public
150  explicit parquet_schema() = default;
151 
157  parquet_schema(parquet_column_schema root_column_schema) : _root{std::move(root_column_schema)} {}
158 
164  [[nodiscard]] auto const& root() const& { return _root; }
165 
170  [[nodiscard]] auto root() && { return std::move(_root); }
171 
172  private
173  parquet_column_schema _root;
174 };
175 
180  public
182  using key_value_metadata = std::unordered_map<std::string, std::string>
184  using row_group_metadata = std::unordered_map<std::string, int64_t>
185 
191  explicit parquet_metadata() = default;
192 
203  int64_t num_rows,
204  size_type num_rowgroups,
205  key_value_metadata file_metadata,
206  std::vector<row_group_metadata> rg_metadata)
207  : _schema{std::move(schema)},
208  _num_rows{num_rows},
209  _num_rowgroups{num_rowgroups},
210  _file_metadata{std::move(file_metadata)},
211  _rowgroup_metadata{std::move(rg_metadata)}
212  {
213  }
214 
220  [[nodiscard]] auto const& schema() const { return _schema; }
221 
229  [[nodiscard]] auto num_rows() const { return _num_rows; }
230 
236  [[nodiscard]] auto num_rowgroups() const { return _num_rowgroups; }
237 
243  [[nodiscard]] auto const& metadata() const { return _file_metadata; }
244 
250  [[nodiscard]] auto const& rowgroup_metadata() const { return _rowgroup_metadata; }
251 
252  private
253  parquet_schema _schema;
254  int64_t _num_rows;
255  size_type _num_rowgroups;
256  key_value_metadata _file_metadata;
257  std::vector<row_group_metadata> _rowgroup_metadata;
258 };
259 
271  // 组结束
273 } // namespace io
274 } // namespace CUDF_EXPORT cudf
关于 parquet 文件内容的详细信息。
auto const & schema() const
返回 parquet 模式。
auto const & rowgroup_metadata() const
返回文件尾部中的行组元数据。
auto const & metadata() const
返回文件尾部中的键值元数据。
parquet_metadata(parquet_schema schema, int64_t num_rows, size_type num_rowgroups, key_value_metadata file_metadata, std::vector< row_group_metadata > rg_metadata)
构造函数
parquet_metadata()=default
默认构造函数。
auto num_rowgroups() const
返回文件中的行组数量。
std::unordered_map< std::string, int64_t > row_group_metadata
来自每个 RowGroup 元素的行组元数据。
auto num_rows() const
返回根列的行数。
std::unordered_map< std::string, std::string > key_value_metadata
文件尾部中的键值元数据。
parquet_metadata read_parquet_metadata(source_info const & src_info)
读取 parquet 数据集的元数据。
int32_t size_type
用于列和表的行索引类型。
定义: types.hpp:95
cuDF-IO API 类型定义
TypeKind
Parquet 中的基本数据类型,决定数据的物理存储方式。
cuDF 接口
parquet 列的模式,包括嵌套列。
auto const & child(int idx) const &
返回给定索引的子模式。
auto name() const
返回 parquet 列名;可以为空。
auto const & children() const &
返回所有子列的模式。
auto children() &
返回所有子列的模式。
auto num_children() const
返回子列的数量。
auto type_kind() const
返回列的 parquet 类型。
parquet_column_schema()=default
默认构造函数。
auto child(int idx) &
返回给定索引的子模式。
parquet_column_schema(std::string_view name, parquet::TypeKind type, std::vector< parquet_column_schema > children)
构造函数
parquet 文件的模式。
parquet_schema()=default
默认构造函数。
auto root() &
返回包含所有列作为字段的 struct 列的模式。
auto const & root() const &
返回包含所有列作为字段的 struct 列的模式。
parquet_schema(parquet_column_schema root_column_schema)
构造函数
读取接口的源信息。