You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Skip materializing splitless chunk children during split collection
Split collection previously built a full Layout + LayoutReader for every
chunk of every column just so flat chunks could re-register the chunk-end
boundary the parent already knows from its chunk offsets.
- VTable::registers_interior_splits() (default true; flat returns false)
lets a layout declare that its readers only ever push the end of the
requested range, forwarded through LayoutVTablePlugin and DynLayout.
- LayoutChildren::child_has_no_interior_splits(idx) answers that without
materializing the child: owned children ask the vtable, viewed children
resolve only the flatbuffer encoding tag against the registry, with a
single-slot memo since siblings almost always share one encoding.
- ChunkedReader caches a lazy per-chunk classification; when no chunk has
interior splits it bulk-extends boundaries straight from chunk_offsets.
- RowSplits drops consecutive identical ascending runs (columns with
aligned chunk boundaries) and skips the final sort when a single run
survives. StructReader pushes its end boundary after the field walk so
the common case stays one ascending run.
- LazyReaderChildren::new_uniform avoids a DType and name clone per chunk
at reader construction.
Split-collection bench medians (64 columns x 256 chunks): cold 916us ->
181us, warm 247us -> 13us; with fully misaligned columns cold 1223us ->
321us, warm 387us -> 146us.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
0 commit comments