Iceberg Compatibility Matrix¶
This document records which Iceberg V2/V3 features BenoStreamDB writes and reads
conformantly, how that is validated, and the known deviations. It is the
“published compatibility matrix” deliverable of WS4 in
plans/production_readiness_plan.md.
How this is validated¶
Independently of BenoStreamDB’s own reader, tables are validated with PyIceberg (an independent Apache Iceberg implementation) and against the Iceberg spec’s structural requirements.
Layer |
Test |
What it proves |
|---|---|---|
Structural (Rust) |
|
The metadata JSON, manifest-list Avro, and data-manifest Avro carry the spec-required fields, field-ids, and types. |
Independent reader (Python) |
|
PyIceberg loads a BenoStreamDB table and reads its data (schema + values) correctly. |
Reverse direction (Python) |
|
BenoStreamDB reads a PyIceberg-written table. |
Run the Python interop tests with the project virtualenv:
.venv/bin/python -m pytest tests/integration/test_bsdb_to_pyiceberg.py -v
Validated against pyiceberg 0.12.0 / pyarrow 25.0.1.
Feature matrix¶
Feature |
V2/V3 |
Status |
Notes |
|---|---|---|---|
Table metadata JSON ( |
V2 |
âś… Conformant |
All required fields present; validated by PyIceberg load. |
Manifest list ( |
V2 |
âś… Conformant |
All fields carry spec |
Data manifest ( |
V2 |
âś… Conformant |
|
Absolute artifact paths |
V2 |
âś… Conformant |
Snapshot |
Snapshot log / metadata log |
V2 |
âś… Conformant |
|
Sort orders |
V2 |
âś… Conformant |
Persisted in metadata JSON ( |
Partition specs / evolution |
V2 |
âś… Conformant |
|
Column statistics (NDV / bounds) |
V2 |
âś… Conformant |
|
Nanosecond timestamps |
V2 |
âś… Conformant |
|
Row lineage ( |
V3 |
âś… Conformant |
|
Equality / position deletes |
V2 |
âś… Conformant |
Delete files registered in manifest entries. |
Deletion vectors |
V3 |
⚠️ Extension |
Written into Puffin blobs (BenoStream extension; not a base V3 reader feature). |
Puffin index blobs |
— |
⚠️ Extension |
BenoStream overlay indexes (HNSW/TQ/PQ/BM25/bitmap) ride in Puffin; standard readers ignore them and fall back to full scans. |
|
— |
⚠️ Extension |
BenoStream durability artifacts; standard readers ignore them. |
Legend: ✅ conformant and machine-checked · ⚠️ documented deviation/extension.
Known deviations from the Iceberg spec¶
BenoStream overlay indexes (Puffin). Index blobs are an extension. A standard Iceberg reader sees the data files and returns correct results via a full scan; only BenoStream uses the overlay indexes.
_staging/and_wal/directories live beside the table. They are ignored by standard readers and excluded from orphan cleanup.Deletion vectors are supported as a BenoStream extension over Puffin, not as a base V3 reader feature.
pgvector-style vector types (
FixedSizeList<Float32>etc.) are stored as standard Iceberglist<float>columns; vector distance operators are BenoStream SQL extensions (see the README’s pgvector notes).
Bugs found and fixed by this validation¶
Validating with an independent reader surfaced four conformance bugs that BenoStreamDB’s own round-trip tests did not catch:
Relative
manifest-listpath — external readers resolve it against the process CWD, not the table location. Now written absolute.Relative
manifest_pathin the manifest list — same class; now absolute.Relative
file_pathin the data manifest — now absolute on write and relativized back on read (so internal path handling is unchanged).Avro schemas missing Iceberg metadata — added
field-idon every field,logicalType: mapon map arrays, andelement-idon list arrays.
See plans/production_readiness_plan.md §2.5 for details.