parquet_metadata.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
11 #pragma once
12 
13 #include <cudf/io/datasource.hpp>
15 #include <cudf/io/types.hpp>
16 #include <cudf/table/table.hpp>
18 #include <cudf/utilities/export.hpp>
20 
21 #include <memory>
22 #include <span>
23 #include <string>
24 #include <string_view>
25 #include <vector>
26 
27 namespace CUDF_EXPORT cudf {
28 namespace io {
36 
41  public:
47  explicit parquet_column_schema() : _cudf_type{data_type{type_id::EMPTY}} {}
48 
57  parquet_column_schema(std::string_view name,
58  Type type,
59  std::vector<parquet_column_schema>&& children,
60  data_type cudf_type)
61  : _name{name}, _type{type}, _children{std::move(children)}, _cudf_type{cudf_type}
62  {
63  }
64 
70  [[nodiscard]] auto name() const { return _name; }
71 
77  [[nodiscard]] auto type() const { return _type; }
78 
84  [[nodiscard]] auto const& children() const& { return _children; }
85 
90  [[nodiscard]] auto children() && { return std::move(_children); }
91 
99  [[nodiscard]] auto const& child(int idx) const& { return children().at(idx); }
100 
105  [[nodiscard]] auto child(int idx) && { return std::move(children().at(idx)); }
106 
112  [[nodiscard]] auto num_children() const { return children().size(); }
113 
121  [[nodiscard]] auto cudf_type() const { return _cudf_type; }
122 
123  private:
124  std::string _name;
125  // 3 types available: Physical, Converted, Logical
126  Type _type; // Physical type
127  std::vector<parquet_column_schema> _children;
128  data_type _cudf_type;
129 };
130 
135  public:
141  explicit parquet_schema() = default;
142 
148  parquet_schema(parquet_column_schema root_column_schema) : _root{std::move(root_column_schema)} {}
149 
155  [[nodiscard]] auto const& root() const& { return _root; }
156 
161  [[nodiscard]] auto root() && { return std::move(_root); }
162 
163  private:
164  parquet_column_schema _root;
165 };
166 
171  public:
173  using key_value_metadata = std::unordered_map<std::string, std::string>;
175  using row_group_metadata = std::unordered_map<std::string, int64_t>;
177  using column_chunk_metadata = std::unordered_map<std::string, std::vector<int64_t>>;
178 
184  explicit parquet_metadata() = default;
185 
199  int64_t num_rows,
200  size_type num_rowgroups,
201  std::vector<size_type> num_rowgroups_per_file,
202  key_value_metadata file_metadata,
203  std::vector<row_group_metadata> rg_metadata,
205  : _schema{std::move(schema)},
206  _num_rows{num_rows},
207  _num_rowgroups{num_rowgroups},
208  _num_rowgroups_per_file{std::move(num_rowgroups_per_file)},
209  _file_metadata{std::move(file_metadata)},
210  _rowgroup_metadata{std::move(rg_metadata)},
211  _column_chunk_metadata{std::move(column_chunk_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& num_rowgroups_per_file() const { return _num_rowgroups_per_file; }
244 
250  [[nodiscard]] auto const& metadata() const { return _file_metadata; }
251 
257  [[nodiscard]] auto const& rowgroup_metadata() const { return _rowgroup_metadata; }
258 
266  [[nodiscard]] auto const& columnchunk_metadata() const { return _column_chunk_metadata; }
267 
268  private:
269  parquet_schema _schema;
270  int64_t _num_rows;
271  size_type _num_rowgroups;
272  std::vector<size_type> _num_rowgroups_per_file;
273  key_value_metadata _file_metadata;
274  std::vector<row_group_metadata> _rowgroup_metadata;
275  column_chunk_metadata _column_chunk_metadata;
276 };
277 
289 
299 std::vector<parquet::FileMetaData> read_parquet_footers(
300  std::span<std::unique_ptr<cudf::io::datasource> const> sources);
301 
326 std::unique_ptr<table> read_parquet_column_chunk_bounds(
327  std::span<parquet::FileMetaData const> parquet_metadatas,
328  std::span<std::string const> column_names,
329  cuda::stream_ref stream = cudf::get_default_stream(),
331  // end of group
333 } // namespace io
334 } // namespace CUDF_EXPORT cudf
Indicator for the logical data type of an element in a column.
Definition: types.hpp:279
Information about content of a parquet file.
auto const & schema() const
Returns the parquet schema.
auto const & rowgroup_metadata() const
Returns the row group metadata in the file footer.
auto const & metadata() const
Returns the Key value metadata in the file footer.
parquet_metadata()=default
Default constructor.
parquet_metadata(parquet_schema schema, int64_t num_rows, size_type num_rowgroups, std::vector< size_type > num_rowgroups_per_file, key_value_metadata file_metadata, std::vector< row_group_metadata > rg_metadata, column_chunk_metadata column_chunk_metadata)
constructor
auto num_rowgroups() const
Returns the total number of rowgroups.
std::unordered_map< std::string, std::vector< int64_t > > column_chunk_metadata
Column chunk metadata from each ColumnChunkMetaData element.
std::unordered_map< std::string, int64_t > row_group_metadata
Row group metadata from each RowGroup element.
auto const & columnchunk_metadata() const
Returns a map of column names to vectors of total_uncompressed_size metadata from all their column ch...
auto num_rows() const
Returns the number of rows of the root column.
auto const & num_rowgroups_per_file() const
Returns the number of rowgroups in each file.
std::unordered_map< std::string, std::string > key_value_metadata
Key-value metadata in the file footer.
Non-owning references to the memory resources used by a cuDF operation.
Interface classes for providing input data to the readers from files, host memory,...
APIs for querying the default CUDA stream and per-thread default stream status.
cuda::stream_ref const get_default_stream()
Get the current default stream.
std::unique_ptr< table > read_parquet_column_chunk_bounds(std::span< parquet::FileMetaData const > parquet_metadatas, std::span< std::string const > column_names, cuda::stream_ref stream=cudf::get_default_stream(), cudf::memory_resources mr=cudf::get_current_device_resource_ref())
Decode parquet column-chunk min/max statistics for selected leaf columns.
std::vector< parquet::FileMetaData > read_parquet_footers(std::span< std::unique_ptr< cudf::io::datasource > const > sources)
Constructs FileMetaData objects from parquet dataset.
parquet_metadata read_parquet_metadata(source_info const &src_info)
Reads metadata of parquet dataset.
Type
Basic data types in Parquet, determines how data is physically stored.
rmm::device_async_resource_ref get_current_device_resource_ref()
Get the current device memory resource reference.
int32_t size_type
Row index type for columns and tables.
Definition: types.hpp:76
type_id
Identifies a column's logical element type.
Definition: types.hpp:185
@ EMPTY
Always null with no underlying data.
Type definitions for the cuDF-IO API.
APIs for getting and setting the current device memory resource.
cuDF interfaces
Definition: host_udf.hpp:27
Parquet footer schema structs.
Schema of a parquet column, including the nested columns.
auto const & child(int idx) const &
Returns schema of the child with the given index.
auto name() const
Returns parquet column name; can be empty.
auto const & children() const &
Returns schemas of all child columns.
auto type() const
Returns parquet physical type of the column.
auto children() &&
Returns schemas of all child columns.
auto num_children() const
Returns the number of child columns.
parquet_column_schema(std::string_view name, Type type, std::vector< parquet_column_schema > &&children, data_type cudf_type)
constructor
parquet_column_schema()
Default constructor.
auto child(int idx) &&
Returns schema of the child with the given index.
auto cudf_type() const
Returns the cudf data type for this column.
Schema of a parquet file.
parquet_schema()=default
Default constructor.
auto root() &&
Returns the schema of the struct column that contains all columns as fields.
auto const & root() const &
Returns the schema of the struct column that contains all columns as fields.
parquet_schema(parquet_column_schema root_column_schema)
constructor
Source information for read interfaces.
Definition: types.hpp:306
Class definition for cudf::table.