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]

Reply via email to