Puffin reading is supported (src/iceberg/puffin/file_metadata.{h,cc}, puffin_format.{h,cc}, with kDeletionVectorV1 = \"deletion-vector-v1\" constant). The manifest entry already carries content_offset / content_size_in_bytes / referenced_data_file for V3 deletion vectors, and Snapshot::IsDeletionVector() branches exist.
What's missing: a PuffinWriter (or equivalent) that can serialize a Roaring bitmap as a deletion-vector-v1 blob, write a Puffin file, and return the offsets needed to populate DataFile { content = DELETION_VECTORS, content_offset, content_size_in_bytes, referenced_data_file }.
src/iceberg/data/position_delete_writer.{h,cc} writes the older Parquet-based position-delete format, not Puffin DVs.
API sketch
class PuffinWriter {
Status WriteDeletionVector(const std::string& referenced_data_file,
const RoaringBitmap& bitmap);
Result<PuffinFooter> Finish();
};
Puffin reading is supported (
src/iceberg/puffin/file_metadata.{h,cc},puffin_format.{h,cc}, withkDeletionVectorV1 = \"deletion-vector-v1\"constant). The manifest entry already carriescontent_offset/content_size_in_bytes/referenced_data_filefor V3 deletion vectors, andSnapshot::IsDeletionVector()branches exist.What's missing: a
PuffinWriter(or equivalent) that can serialize a Roaring bitmap as adeletion-vector-v1blob, write a Puffin file, and return the offsets needed to populateDataFile { content = DELETION_VECTORS, content_offset, content_size_in_bytes, referenced_data_file }.src/iceberg/data/position_delete_writer.{h,cc}writes the older Parquet-based position-delete format, not Puffin DVs.API sketch