This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 14e51e87b8 Optimize NullableSingleInputAggregationFunction when entire 
block is null (#13758)
14e51e87b8 is described below

commit 14e51e87b8334b7fbcc5b3dfe67a7061710c5279
Author: Yash Mayya <yash.ma...@gmail.com>
AuthorDate: Wed Aug 14 13:31:51 2024 +0530

    Optimize NullableSingleInputAggregationFunction when entire block is null 
(#13758)
---
 .../NullableSingleInputAggregationFunction.java      | 10 +++++++++-
 .../apache/pinot/perf/BenchmarkModeAggregation.java  | 20 ++++++++++++--------
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/NullableSingleInputAggregationFunction.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/NullableSingleInputAggregationFunction.java
index 907f0139d2..af2a41610e 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/NullableSingleInputAggregationFunction.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/NullableSingleInputAggregationFunction.java
@@ -81,7 +81,10 @@ public abstract class 
NullableSingleInputAggregationFunction<I, F extends Compar
       return;
     }
 
-    forEachNotNull(length, roaringBitmap.getIntIterator(), consumer);
+    // Skip if entire block is null
+    if (!roaringBitmap.contains(0, length)) {
+      forEachNotNull(length, roaringBitmap.getIntIterator(), consumer);
+    }
   }
 
   /**
@@ -118,6 +121,11 @@ public abstract class 
NullableSingleInputAggregationFunction<I, F extends Compar
    * @param <A> The type of the accumulator
    */
   public <A> A foldNotNull(int length, @Nullable RoaringBitmap roaringBitmap, 
A initialAcum, Reducer<A> reducer) {
+    // Exit early if entire block is null
+    if (_nullHandlingEnabled && roaringBitmap != null && 
roaringBitmap.contains(0, length)) {
+      return initialAcum;
+    }
+
     IntIterator intIterator = roaringBitmap == null ? null : 
roaringBitmap.getIntIterator();
     return foldNotNull(length, intIterator, initialAcum, reducer);
   }
diff --git 
a/pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkModeAggregation.java 
b/pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkModeAggregation.java
index b1051a1476..dcfff95c41 100644
--- 
a/pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkModeAggregation.java
+++ 
b/pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkModeAggregation.java
@@ -58,11 +58,11 @@ public class BenchmarkModeAggregation extends 
AbstractAggregationFunctionBenchma
   @Param({"100", "50", "0"})
   public int _nullHandlingEnabledPerCent;
   private boolean _nullHandlingEnabled;
-  @Param({"2", "4", "8", "16", "32", "64", "128"})
+  @Param({"1", "2", "4", "8", "16", "32", "64", "128"})
   protected int _nullPeriod;
   private final Random _segmentNullRandomGenerator = new Random(42);
-  private double _modeIgnoringNull;
-  private double _modeNullAware;
+  private Double _modeIgnoringNull;
+  private Double _modeNullAware;
   private final int _numDocs = DocIdSetPlanNode.MAX_DOC_PER_CALL;
 
   public static void main(String[] args)
@@ -122,11 +122,15 @@ public class BenchmarkModeAggregation extends 
AbstractAggregationFunctionBenchma
         .get()
         .getKey()
         .doubleValue();
-    _modeNullAware = nullAwareDistribution.entrySet().stream()
-        .max(Comparator.comparingInt(Map.Entry::getValue))
-        .get()
-        .getKey()
-        .doubleValue();
+    if (nullAwareDistribution.isEmpty()) {
+      _modeNullAware = null;
+    } else {
+      _modeNullAware = nullAwareDistribution.entrySet().stream()
+              .max(Comparator.comparingInt(Map.Entry::getValue))
+              .get()
+              .getKey()
+              .doubleValue();
+    }
   }
 
   @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to