Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ca6beca
first draft
abigalekim Jul 22, 2026
e880fff
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Jul 22, 2026
700e7d8
Merge branch 'main' of github.com:abigalekim/cudf into ak/json-to-var…
abigalekim Jul 28, 2026
692a477
changes
abigalekim Jul 28, 2026
12e0193
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
abigalekim Jul 28, 2026
6c88532
merge
abigalekim Jul 28, 2026
1ced02f
Update cpp/include/cudf/io/experimental/variant.hpp
abigalekim Jul 28, 2026
8edfbbb
Update cpp/src/io/parquet/experimental/variant_encode.cu
abigalekim Jul 28, 2026
00611b7
Update cpp/tests/io/experimental/variant_encode_test.cpp
abigalekim Jul 28, 2026
c2c7086
fixing ai comments & merge
abigalekim Jul 28, 2026
469ea0e
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
abigalekim Jul 28, 2026
df45af3
build
abigalekim Jul 28, 2026
8089b45
changers
abigalekim Jul 28, 2026
4d9ad3a
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Jul 30, 2026
66df6ad
reviews
abigalekim Jul 30, 2026
ea36a8d
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
abigalekim Jul 30, 2026
f551764
coderabbit
abigalekim Jul 30, 2026
f50b7b3
addressing reviewers
abigalekim Aug 4, 2026
75526b5
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 4, 2026
69250fb
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 5, 2026
0628356
boolean support
abigalekim Aug 5, 2026
97a0374
reviewers
abigalekim Aug 5, 2026
a86276e
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 5, 2026
efb948f
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 5, 2026
8d82b2f
splitting pr
abigalekim Aug 6, 2026
003569d
git puMerge branch 'ak/json-to-variant-infra' of github.com:abigaleki…
abigalekim Aug 6, 2026
5677023
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 6, 2026
50cc306
Merge branch 'main' into ak/json-to-variant-infra
abigalekim Aug 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,7 @@ add_library(
src/io/parquet/experimental/hybrid_scan_preprocess.cu
src/io/parquet/experimental/page_index_filter.cu
src/io/parquet/experimental/page_index_filter_utils.cu
src/io/parquet/experimental/variant_encode.cu
src/io/parquet/experimental/variant_extract.cu
src/io/parquet/experimental/variant_path.cpp
src/io/parquet/expression_transform_helpers.cpp
Expand Down
31 changes: 31 additions & 0 deletions cpp/include/cudf/io/experimental/variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@

#include <cudf/column/column.hpp>
#include <cudf/column/column_view.hpp>
#include <cudf/table/table_view.hpp>
#include <cudf/types.hpp>
#include <cudf/utilities/default_stream.hpp>
#include <cudf/utilities/memory_resource.hpp>
#include <cudf/utilities/span.hpp>

#include <rmm/cuda_stream_view.hpp>

#include <memory>
#include <string>
#include <string_view>

/**
Expand Down Expand Up @@ -109,6 +112,34 @@ namespace io::parquet::experimental {
rmm::cuda_stream_view stream = cudf::get_default_stream(),
rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref());

/**
* @brief Encode a table as a VARIANT object column, one row per VARIANT.
*
* Each table row is encoded as a VARIANT object with one field per column. The shared metadata
* blob stores column names as a sorted UTF-8 key dictionary (version 1, offset_size chosen to
* fit the total key-string length). Null column values are encoded as VARIANT null primitives.
*
* Supported column types: `INT8`, `INT16`, `INT32`, `INT64`, `FLOAT32`, `FLOAT64`, `STRING`, and
* columns whose type is `EMPTY` (treated as all-null). Other types throw. Tables must have fewer
* than 256 columns.
*
* @param input Table to encode (typically produced by `cudf::io::read_json`)
* @param column_names Column name for each column in `input`; must satisfy
* `column_names.size() == input.num_columns()`
* @param stream CUDA stream
* @param mr Device memory resource
* @return VARIANT column: `STRUCT<list<uint8>, list<uint8>>` (metadata child, value child)
*
* @throws std::invalid_argument if any column has an unsupported type, if the table has ≥ 256
* columns, or if `column_names.size() != input.num_columns()`
* @throws std::overflow_error if the total encoded value bytes exceed 2 GiB
*/
Comment thread
abigalekim marked this conversation as resolved.
[[nodiscard]] std::unique_ptr<column> encode_variant(
cudf::table_view const& input,
cudf::host_span<std::string const> column_names,
rmm::cuda_stream_view stream = cudf::get_default_stream(),
rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref());
Comment thread
abigalekim marked this conversation as resolved.

/** @} */
} // namespace io::parquet::experimental
} // namespace CUDF_EXPORT cudf
Loading
Loading