Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ca6beca
first draft
Jul 22, 2026
e880fff
Merge branch 'main' into ak/json-to-variant-infra
Jul 22, 2026
700e7d8
Merge branch 'main' of github.com:abigalekim/cudf into ak/json-to-var…
Jul 28, 2026
692a477
changes
Jul 28, 2026
12e0193
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
Jul 28, 2026
6c88532
merge
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
Jul 28, 2026
469ea0e
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
Jul 28, 2026
df45af3
build
Jul 28, 2026
8089b45
changers
Jul 28, 2026
4d9ad3a
Merge branch 'main' into ak/json-to-variant-infra
Jul 30, 2026
66df6ad
reviews
Jul 30, 2026
ea36a8d
Merge branch 'ak/json-to-variant-infra' of github.com:abigalekim/cudf…
Jul 30, 2026
f551764
coderabbit
Jul 30, 2026
f50b7b3
addressing reviewers
Aug 4, 2026
75526b5
Merge branch 'main' into ak/json-to-variant-infra
Aug 4, 2026
69250fb
Merge branch 'main' into ak/json-to-variant-infra
Aug 5, 2026
0628356
boolean support
Aug 5, 2026
97a0374
reviewers
Aug 5, 2026
a86276e
Merge branch 'main' into ak/json-to-variant-infra
Aug 5, 2026
efb948f
Merge branch 'main' into ak/json-to-variant-infra
Aug 5, 2026
8d82b2f
splitting pr
Aug 6, 2026
003569d
git puMerge branch 'ak/json-to-variant-infra' of github.com:abigaleki…
Aug 6, 2026
5677023
Merge branch 'main' into ak/json-to-variant-infra
Aug 6, 2026
50cc306
Merge branch 'main' into ak/json-to-variant-infra
Aug 8, 2026
12558f4
Merge branch 'main' into ak/json-to-variant-infra
Aug 12, 2026
cfaa113
Merge branch 'main' into ak/json-to-variant-infra
Aug 12, 2026
49619b6
Merge branch 'main' into ak/json-to-variant-infra
Aug 13, 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
52 changes: 52 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,17 @@

#include <cudf/column/column.hpp>
#include <cudf/column/column_view.hpp>
#include <cudf/strings/strings_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 +113,54 @@ 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 STRING column as a scalar VARIANT column.
*
* Each non-null string is encoded as a VARIANT scalar value: a short_string blob (1 header byte +
* payload) for strings shorter than 64 bytes, or a long_string primitive blob (1 header + 4-byte
* LE length + payload) for longer strings. The metadata blob for every row is the minimal
* empty-dictionary encoding `{0x01, 0x00, 0x00}` (version 1, 0 keys). Null input rows produce
* null VARIANT struct rows.
*
* @param input STRING column to encode
* @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 `strings` is not a STRING column
Comment thread
abigalekim marked this conversation as resolved.
Resolved
*/
[[nodiscard]] std::unique_ptr<column> encode_strings_to_variant(
cudf::strings_column_view const& input,
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`, `STRING`, and columns whose type is
* `EMPTY` (treated as all-null). Other types throw. Tables must have fewer than 256 columns.
* Total encoded output must be < 2 GiB.
*
* @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()`
*/
Comment thread
abigalekim marked this conversation as resolved.
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.
Resolved

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