alamb commented on issue #7870:
URL: https://github.com/apache/arrow-rs/issues/7870#issuecomment-3038776720
> The one thing VariantBuilder does provide is the handling of separate
metadata + value buffers. But that just proves the current "append as many
values as you like" API is incorrect -- each top-level variant value in a
column of variant values needs its own metadata value -- not one aggregate
metadata value for the whole column.
I think this is an important usecase (it is possible / allowed for the
variant value stored in a row to be non nested)
> Also, it turns out you can finish a VariantBuilder without ever appending
anything to it, which is also bad (produces an empty value buffer).
I think an important usecase for `VariantBuilder` is to convert a column of
an existing type (e.g. json strings, ints, etc) into a column of varaint
values. Something like:
```rust
let mut builder = VariantBuilder::new();
// store the offsets of the variants created
let mut offsets = vec[];
for row in rows {
// record where the current variant starts (THIS API DOES NOT EXIST YET)
offsets.push(builder.current_offset());
// convert the row to a variant
convert_row_to_variant(&mut builder, row))?
}
```
Maybe in addition to the `metadata` and `values`, `VariantBuilder` itself
should store the offsets of each of the created variants 🤔
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]