Gabriel39 opened a new pull request, #66397: URL: https://github.com/apache/doris/pull/66397
### What - Fuse nullable definition-level runs with the row filter in one traversal. - Produce physical decode ranges, the selected NULL map, and selected value counts without first materializing and rescanning a row-wise selection map. - Reuse the existing selected-decoder strategies and nullable in-place expansion. - Restrict fusion to batches with at least 1,024 rows, at least 10% NULLs, and materially fragmented definition-level runs. No-NULL, low-NULL, clustered, nested, and non-expandable shapes keep the legacy path. ### Why the guard is conservative The full benchmark matrix includes no-NULL, low-NULL, and clustered level plans as negative controls. Those shapes do not remove enough legacy work to guarantee a win, so this change deliberately leaves them unchanged. Decoder selection and encoding-specific materialization are not modified. ### Verification - ASAN: `NativeNullableSelectionTest.*` and benchmark scenario tests: 16/16 passed. - ASAN: `ParquetV2NativeDecoderTest.*`: 118/118 passed. - Release microbenchmark: 100 legacy/fused pairs validated identical ranges and NULL maps. Across the 30 production-eligible pairs, 0 regressions; mean CPU time -42.68%, least improvement 8.08%. - Representative fragmented nullable case (10 repetitions): 10% selectivity / 50% NULL median CPU 400,220 -> 177,905 ns (-55.55%), CV 0.58% / 1.28%. - High-selectivity boundary (10 repetitions): 99% selectivity / 50% NULL median CPU 687,385 -> 460,657 ns (-32.98%), CV 0.60% / 1.32%. The microbenchmark isolates nullable selection planning; it is not presented as an end-to-end query speedup. -- 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]
