viirya opened a new pull request, #23956:
URL: https://github.com/apache/datafusion/pull/23956

   ## Which issue does this PR close?
   
   - Closes #23955.
   
   ## Rationale for this change
   
   `PrimitiveDistinctCountAccumulator::update_batch` does a per-element 
validity check on every row even when the array has no nulls. Its own 
`merge_batch` already inserts wholesale from the values buffer, so the same 
fast path applies to `update_batch`. Inspired by the null-free fast paths added 
to `percentile_cont`/`median` in #23954.
   
   ## What changes are included in this PR?
   
   - When `null_count() == 0`, insert directly from the values buffer 
(`self.values.extend(arr.values().iter().copied())`) instead of the per-element 
`Option` check.
   - Unit test asserting the fast and general paths agree (a dense array and a 
null-containing array with the same non-null values yield the same distinct 
count).
   
   ## Benchmarks
   
   `count_distinct` benchmark, null-free 8192-row batches:
   
   ```
   count_distinct i64 80% distinct   -67.0%  (54.9 -> 18.1 us)
   count_distinct i64 99% distinct   -66.0%  (54.9 -> 18.7 us)
   count_distinct u32 80% distinct   -66.9%  (53.9 -> 17.8 us)
   count_distinct u32 99% distinct   -65.3%  (53.3 -> 18.5 us)
   count_distinct i32 80% distinct   -66.9%  (54.1 -> 17.9 us)
   count_distinct i32 99% distinct   -66.2%  (53.2 -> 18.0 us)
   ```
   
   The bitmap-backed cases (u8/i8/u16/i16) and the grouped-accumulator cases 
don't use this path and are unchanged, as expected.
   
   ## Are these changes tested?
   
   Yes — new unit test; existing count-distinct tests pass.
   
   ## Are there any user-facing changes?
   
   No.
   


-- 
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