fallintoplace opened a new pull request, #1900: URL: https://github.com/apache/iceberg-go/pull/1900
## What changed - Allocate the equality-delete mask only after the first matching row. - Return the input batch directly when no row matches. - Keep the existing `compute.Filter` path for batches with matches. - Add a no-match correctness test and integer/string benchmarks. ## Why An equality delete set can be non-empty even when a record batch has no matching rows. The old path allocated and filled a full bitmap and called `compute.Filter` for every batch. ## Benchmark Run on an Apple M1 Pro with: `go test ./table -run '^$' -bench 'BenchmarkProcessEqualityDeletesNoMatch(Int|String)/rows=(100000|1000000)/deletes=10$' -benchmem -count=5` Representative medians: | Case | Before | After | | --- | --- | --- | | Int, 100K rows / 10 deletes | 2.76 ms/op, 2.03 MB/op, 86 allocs/op | 2.22 ms/op, 176 B/op, 4 allocs/op | | Int, 1M rows / 10 deletes | 26.46 ms/op, 20.15 MB/op, 87 allocs/op | 22.12 ms/op, 176 B/op, 4 allocs/op | | String, 100K rows / 10 deletes | 4.58 ms/op, 2.94 MB/op, 95 allocs/op | 2.63 ms/op, 208 B/op, 4 allocs/op | | String, 1M rows / 10 deletes | 40.57 ms/op, 29.28 MB/op, 96 allocs/op | 26.18 ms/op, 208 B/op, 4 allocs/op | The allocation reduction is the main result. Wall time had normal run-to-run noise. ## Testing - `go test ./table -count=1` - `go test ./table -race -count=1` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
