Skip to content

feat(vortex-geo): per-row 2-D AABB compute primitive#8831

Open
HarukiMoriarty wants to merge 2 commits into
nemo/geo-null-propagationfrom
nemo/geo-bounding-rect
Open

feat(vortex-geo): per-row 2-D AABB compute primitive#8831
HarukiMoriarty wants to merge 2 commits into
nemo/geo-null-propagationfrom
nemo/geo-bounding-rect

Conversation

@HarukiMoriarty

@HarukiMoriarty HarukiMoriarty commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

What

Adds vortex_geo::bounds::aabbs_2d: decode a native geometry column and return each row's 2-D axis-aligned bounding box as a (min, max) pair of [x, y] corners, one iterator item per row.

This is an internal compute primitive, deliberately not a scalar function. The consumer is a row-oriented spatial-join operator that bulk-loads an in-memory R-tree (rstar::RTree::bulk_load takes individual objects), so it needs row-shaped corners rather than a columnar Rect/geoarrow.box array it would only read back row by row. Accordingly: no registration, no SQL name, and no geo/rstar types in the public signature.

flatten_coordinates and geometries read/decode row storage directly, so they
require null-free input; note that callers filter null rows first.

Signed-off-by: Nemo Yu <zyu379@wisc.edu>
@codspeed-hq

codspeed-hq Bot commented Jul 17, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 1670 untouched benchmarks
⏩ 53 skipped benchmarks1


Comparing nemo/geo-bounding-rect (0c8823f) with nemo/geo-null-propagation (8fe6c0e)2

Open in CodSpeed

Footnotes

  1. 53 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on nemo/geo-null-propagation (e6eeaae) during the generation of this report, so 2e70398 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Polar Signals Profiling Results

Latest Run

Status Commit Job Attempt Link
🟢 Done 0c8823f 1 Explore Profiling Data
Previous Runs (2)
Status Commit Job Attempt Link
🟢 Done 488a97c 1 Explore Profiling Data
🟢 Done 5dbbc22 1 Explore Profiling Data

Powered by Polar Signals Cloud

@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Verdict: No clear signal (low confidence)
Attributed Vortex impact: +3.8%
Engines: DataFusion No clear signal (+3.9%, low confidence) · DuckDB No clear signal (+3.8%, low confidence)
Vortex (geomean): 0.901x ➖
Parquet (geomean): 0.884x ✅
Shifts: Parquet (control) -11.6% · Median polish -9.9%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.

datafusion / vortex-file-compressed (0.845x ✅, 2↑ 0↓)
name PR 0c8823f (ns) base e6eeaae (ns) ratio (PR/base)
vortex_q00/datafusion:vortex-file-compressed 🚀 9678641 11446321 0.85
vortex_q01/datafusion:vortex-file-compressed 🚀 6289888 7449028 0.84
datafusion / parquet (0.813x ✅, 2↑ 0↓)
name PR 0c8823f (ns) base e6eeaae (ns) ratio (PR/base)
vortex_q00/datafusion:parquet 🚀 19746212 23584739 0.84
vortex_q01/datafusion:parquet 🚀 4437896 5616200 0.79
duckdb / vortex-file-compressed (0.997x ➖, 0↑ 0↓)
name PR 0c8823f (ns) base e6eeaae (ns) ratio (PR/base)
vortex_q00/duckdb:vortex-file-compressed 9981957 10387695 0.96
vortex_q01/duckdb:vortex-file-compressed 6090312 5885688 1.03
duckdb / parquet (0.961x ➖, 0↑ 0↓)
name PR 0c8823f (ns) base e6eeaae (ns) ratio (PR/base)
vortex_q00/duckdb:parquet 23379471 24576114 0.95
vortex_q01/duckdb:parquet 9434851 9723548 0.97

No file size changes detected.

@HarukiMoriarty HarukiMoriarty added the changelog/feature A new feature label Jul 17, 2026
Adds vortex_geo::bounds::aabbs_2d, decoding a native geometry column to
per-row (min, max) corner pairs for row-oriented consumers, e.g.
bulk-loading an in-memory R-tree in a spatial-join operator. Deliberately
an internal compute primitive rather than a scalar function: no
registration, no SQL name, and no columnar Rect output, since the
consumer reads the boxes row by row.

A null row yields None just like an empty geometry (no box: it matches
nothing in a spatial join). Null rows are filtered out before decoding,
honoring the decode helpers' null-free precondition, and the boxes are
woven back into row order. 2-D only. Columnar consumers keep the Rect
extension type, and the GeometryAabb aggregate remains the whole-column
box.

Signed-off-by: Nemo Yu <zyu379@wisc.edu>
@HarukiMoriarty
HarukiMoriarty force-pushed the nemo/geo-bounding-rect branch from 488a97c to 0c8823f Compare July 17, 2026 20:26
@HarukiMoriarty
HarukiMoriarty changed the base branch from develop to nemo/geo-null-propagation July 17, 2026 20:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/feature A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant