Skip to content

variant: optimize variant object path access (79% lower latency)#10358

Open
friendlymatthew wants to merge 2 commits into
apache:mainfrom
pydantic:friendlymatthew/optimize-variant-object-path-access
Open

variant: optimize variant object path access (79% lower latency)#10358
friendlymatthew wants to merge 2 commits into
apache:mainfrom
pydantic:friendlymatthew/optimize-variant-object-path-access

Conversation

@friendlymatthew

Copy link
Copy Markdown
Contributor

Rationale for this change

Based on benchmark #10357

Screenshot 2026-07-16 at 5 15 20 PM

This PR speeds up field extraction from unshredded variant objects by avoiding repeated field name decoding for every row

Variant object keys are stored as numeric field ids that map to a metadata dictionary. variant_get currently stores a named path by repeatedly mapping those ids back to strings and comparing the strings for each row, even when a batch shares one metadata dictionary. This repeated per-row work dominates when dealing with wide dictionaries

This optimization adds metadata scoped field id lookups, caches parsed metadata, and resolves named path elements to ids once per metadata dictionary before scanning rows. It re-resolves paths when the metadata changes and retains name lookup for unsorted dictionaries

@github-actions github-actions Bot added the parquet-variant parquet-variant* crates label Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

parquet-variant parquet-variant* crates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant