You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by jl...@apache.org on 2025/03/25 21:16:39 UTC

(pinot) 01/01: Fix array agg functions to use existing result holder when present (#15308)

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

jlli pushed a commit to branch hotfix-array-agg
in repository https://gitbox.apache.org/repos/asf/pinot.git

commit 701bba35005112f9e5b37cadc98fda3f9f8b9976
Author: Yash Mayya <ya...@gmail.com>
AuthorDate: Mon Mar 24 18:00:58 2025 +0530

    Fix array agg functions to use existing result holder when present (#15308)
---
 .../array/ArrayAggDistinctDoubleFunction.java      |  7 ++-
 .../array/ArrayAggDistinctFloatFunction.java       |  7 ++-
 .../array/ArrayAggDistinctIntFunction.java         |  7 ++-
 .../array/ArrayAggDistinctLongFunction.java        |  7 ++-
 .../array/ArrayAggDistinctStringFunction.java      |  8 ++-
 .../function/array/ArrayAggDoubleFunction.java     |  3 +-
 .../function/array/ArrayAggFloatFunction.java      |  3 +-
 .../function/array/ArrayAggIntFunction.java        |  3 +-
 .../function/array/ArrayAggLongFunction.java       |  3 +-
 .../function/array/ArrayAggStringFunction.java     |  4 +-
 .../pinot/core/common}/SyntheticBlockValSets.java  | 19 +++---
 .../aggregation/function/ArrayAggFunctionTest.java | 68 ++++++++++++++++++++++
 pinot-perf/pom.xml                                 |  5 ++
 .../perf/aggregation/BenchmarkAvgAggregation.java  |  2 +-
 .../BenchmarkDistinctCountAggregation.java         |  2 +-
 .../perf/aggregation/BenchmarkMinAggregation.java  |  2 +-
 .../perf/aggregation/BenchmarkModeAggregation.java |  2 +-
 .../perf/aggregation/BenchmarkSumAggregation.java  |  2 +-
 .../aggregation/BenchmarkVarianceAggregation.java  |  2 +-
 19 files changed, 120 insertions(+), 36 deletions(-)

diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctDoubleFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctDoubleFunction.java
index 457f17c95b..131a67c62f 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctDoubleFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctDoubleFunction.java
@@ -39,14 +39,15 @@ public class ArrayAggDistinctDoubleFunction extends BaseArrayAggDoubleFunction<D
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     double[] value = blockValSet.getDoubleValuesSV();
-    DoubleOpenHashSet valueArray = new DoubleOpenHashSet(length);
+    DoubleOpenHashSet valueSet = aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult()
+        : new DoubleOpenHashSet(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
-        valueArray.add(value[i]);
+        valueSet.add(value[i]);
       }
     });
-    aggregationResultHolder.setValue(valueArray);
+    aggregationResultHolder.setValue(valueSet);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctFloatFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctFloatFunction.java
index 3b0e6a2c3a..bd65decab0 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctFloatFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctFloatFunction.java
@@ -39,14 +39,15 @@ public class ArrayAggDistinctFloatFunction extends BaseArrayAggFloatFunction<Flo
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     float[] value = blockValSet.getFloatValuesSV();
-    FloatOpenHashSet valueArray = new FloatOpenHashSet(length);
+    FloatOpenHashSet valueSet = aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult()
+        : new FloatOpenHashSet(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
-        valueArray.add(value[i]);
+        valueSet.add(value[i]);
       }
     });
-    aggregationResultHolder.setValue(valueArray);
+    aggregationResultHolder.setValue(valueSet);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctIntFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctIntFunction.java
index ea8ffc8777..1e8a4a9f35 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctIntFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctIntFunction.java
@@ -41,14 +41,15 @@ public class ArrayAggDistinctIntFunction extends BaseArrayAggIntFunction<IntSet>
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     int[] value = blockValSet.getIntValuesSV();
-    IntOpenHashSet valueArray = new IntOpenHashSet(length);
+    IntOpenHashSet valueSet =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new IntOpenHashSet(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
-        valueArray.add(value[i]);
+        valueSet.add(value[i]);
       }
     });
-    aggregationResultHolder.setValue(valueArray);
+    aggregationResultHolder.setValue(valueSet);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctLongFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctLongFunction.java
index c193a73c59..78a1b0e95c 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctLongFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctLongFunction.java
@@ -41,14 +41,15 @@ public class ArrayAggDistinctLongFunction extends BaseArrayAggLongFunction<LongS
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     long[] value = blockValSet.getLongValuesSV();
-    LongOpenHashSet valueArray = new LongOpenHashSet(length);
+    LongOpenHashSet valueSet =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new LongOpenHashSet(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
-        valueArray.add(value[i]);
+        valueSet.add(value[i]);
       }
     });
-    aggregationResultHolder.setValue(valueArray);
+    aggregationResultHolder.setValue(valueSet);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctStringFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctStringFunction.java
index 4db445b41b..533cf89ceb 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctStringFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDistinctStringFunction.java
@@ -40,9 +40,11 @@ public class ArrayAggDistinctStringFunction extends BaseArrayAggStringFunction<O
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     String[] value = blockValSet.getStringValuesSV();
-    ObjectOpenHashSet<String> valueArray = new ObjectOpenHashSet<>(length);
-    forEachNotNull(length, blockValSet, (from, to) -> valueArray.addAll(Arrays.asList(value).subList(from, to)));
-    aggregationResultHolder.setValue(valueArray);
+    ObjectOpenHashSet<String> valueSet =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult()
+            : new ObjectOpenHashSet<>(length);
+    forEachNotNull(length, blockValSet, (from, to) -> valueSet.addAll(Arrays.asList(value).subList(from, to)));
+    aggregationResultHolder.setValue(valueSet);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDoubleFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDoubleFunction.java
index 049440ff58..a0fbe7945e 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDoubleFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggDoubleFunction.java
@@ -38,7 +38,8 @@ public class ArrayAggDoubleFunction extends BaseArrayAggDoubleFunction<DoubleArr
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     double[] value = blockValSet.getDoubleValuesSV();
-    DoubleArrayList valueArray = new DoubleArrayList(length);
+    DoubleArrayList valueArray =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new DoubleArrayList(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggFloatFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggFloatFunction.java
index 7f465c289f..98c114158a 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggFloatFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggFloatFunction.java
@@ -38,7 +38,8 @@ public class ArrayAggFloatFunction extends BaseArrayAggFloatFunction<FloatArrayL
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     float[] value = blockValSet.getFloatValuesSV();
-    FloatArrayList valueArray = new FloatArrayList(length);
+    FloatArrayList valueArray =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new FloatArrayList(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggIntFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggIntFunction.java
index 9aece986d1..7f8d7f8e07 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggIntFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggIntFunction.java
@@ -39,7 +39,8 @@ public class ArrayAggIntFunction extends BaseArrayAggIntFunction<IntArrayList> {
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     int[] value = blockValSet.getIntValuesSV();
-    IntArrayList valueArray = new IntArrayList(length);
+    IntArrayList valueArray =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new IntArrayList(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggLongFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggLongFunction.java
index 57e3deac6d..2fab4eb166 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggLongFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggLongFunction.java
@@ -39,7 +39,8 @@ public class ArrayAggLongFunction extends BaseArrayAggLongFunction<LongArrayList
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     long[] value = blockValSet.getLongValuesSV();
-    LongArrayList valueArray = new LongArrayList(length);
+    LongArrayList valueArray =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult() : new LongArrayList(length);
 
     forEachNotNull(length, blockValSet, (from, to) -> {
       for (int i = from; i < to; i++) {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggStringFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggStringFunction.java
index de197e322e..1556890b16 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggStringFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/array/ArrayAggStringFunction.java
@@ -39,7 +39,9 @@ public class ArrayAggStringFunction extends BaseArrayAggStringFunction<ObjectArr
       Map<ExpressionContext, BlockValSet> blockValSetMap) {
     BlockValSet blockValSet = blockValSetMap.get(_expression);
     String[] value = blockValSet.getStringValuesSV();
-    ObjectArrayList<String> valueArray = new ObjectArrayList<>(length);
+    ObjectArrayList<String> valueArray =
+        aggregationResultHolder.getResult() != null ? aggregationResultHolder.getResult()
+            : new ObjectArrayList<>(length);
     forEachNotNull(length, blockValSet, (from, to) -> valueArray.addAll(Arrays.asList(value).subList(from, to)));
     aggregationResultHolder.setValue(valueArray);
   }
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/SyntheticBlockValSets.java b/pinot-core/src/test/java/org/apache/pinot/core/common/SyntheticBlockValSets.java
similarity index 95%
rename from pinot-perf/src/main/java/org/apache/pinot/perf/SyntheticBlockValSets.java
rename to pinot-core/src/test/java/org/apache/pinot/core/common/SyntheticBlockValSets.java
index 24542d9cb8..b01e1a1fe7 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/SyntheticBlockValSets.java
+++ b/pinot-core/src/test/java/org/apache/pinot/core/common/SyntheticBlockValSets.java
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.pinot.perf;
+package org.apache.pinot.core.common;
 
 import com.google.common.base.Preconditions;
 import java.math.BigDecimal;
 import java.util.function.DoubleSupplier;
 import java.util.function.LongSupplier;
 import javax.annotation.Nullable;
-import org.apache.pinot.core.common.BlockValSet;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.segment.spi.index.reader.Dictionary;
 import org.apache.pinot.spi.data.FieldSpec;
@@ -150,10 +149,6 @@ public class SyntheticBlockValSets {
       _values = values;
     }
 
-    public static Long create() {
-      return create(Distribution.createSupplier(42, "EXP(0.5)"));
-    }
-
     public static Long create(LongSupplier supplier) {
       return create(DocIdSetPlanNode.MAX_DOC_PER_CALL, null, supplier);
     }
@@ -173,6 +168,10 @@ public class SyntheticBlockValSets {
       return new Long(nullBitmap, values);
     }
 
+    public static Long create(@Nullable RoaringBitmap nullBitmap, long[] values) {
+      return new Long(nullBitmap, values);
+    }
+
     @Nullable
     @Override
     public RoaringBitmap getNullBitmap() {
@@ -209,10 +208,6 @@ public class SyntheticBlockValSets {
       _values = values;
     }
 
-    public static Double create() {
-      return create(Distribution.createSupplier(42, "EXP(0.5)"));
-    }
-
     public static Double create(DoubleSupplier supplier) {
       return create(DocIdSetPlanNode.MAX_DOC_PER_CALL, null, supplier);
     }
@@ -232,6 +227,10 @@ public class SyntheticBlockValSets {
       return new Double(nullBitmap, values);
     }
 
+    public static Double create(@Nullable RoaringBitmap nullBitmap, double[] values) {
+      return new Double(nullBitmap, values);
+    }
+
     @Nullable
     @Override
     public RoaringBitmap getNullBitmap() {
diff --git a/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/ArrayAggFunctionTest.java b/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/ArrayAggFunctionTest.java
index 17487a7d13..6a815aaeba 100644
--- a/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/ArrayAggFunctionTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/ArrayAggFunctionTest.java
@@ -18,11 +18,25 @@
  */
 package org.apache.pinot.core.query.aggregation.function;
 
+import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
+import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet;
+import it.unimi.dsi.fastutil.longs.LongArrayList;
+import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
+import java.util.Map;
+import org.apache.pinot.common.request.context.ExpressionContext;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
+import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
+import org.apache.pinot.core.query.aggregation.function.array.ArrayAggDistinctDoubleFunction;
+import org.apache.pinot.core.query.aggregation.function.array.ArrayAggDistinctLongFunction;
+import org.apache.pinot.core.query.aggregation.function.array.ArrayAggDoubleFunction;
+import org.apache.pinot.core.query.aggregation.function.array.ArrayAggLongFunction;
 import org.apache.pinot.queries.FluentQueryTest;
 import org.apache.pinot.spi.data.FieldSpec;
 import org.apache.pinot.spi.data.Schema;
 import org.testng.annotations.Test;
 
+import static org.testng.Assert.assertEquals;
+
 
 public class ArrayAggFunctionTest extends AbstractAggregationFunctionTest {
 
@@ -656,4 +670,58 @@ public class ArrayAggFunctionTest extends AbstractAggregationFunctionTest {
         .thenResultIs(new Object[]{"tag1", new int[]{0}}, new Object[]{"tag2", new int[]{0}},
             new Object[]{"tag3", new int[]{}});
   }
+
+  @Test
+  public void testDoubleArrayAggMultipleBlocks() {
+    ArrayAggDistinctDoubleFunction arrayAggDistinctDoubleFunction = new ArrayAggDistinctDoubleFunction(
+        ExpressionContext.forIdentifier("myField"), false);
+    AggregationResultHolder aggregationResultHolder = arrayAggDistinctDoubleFunction.createAggregationResultHolder();
+    arrayAggDistinctDoubleFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Double.create(null, new double[]{1.0, 2.0})));
+    arrayAggDistinctDoubleFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Double.create(null, new double[]{2.0, 3.0})));
+    DoubleOpenHashSet distinctResult = aggregationResultHolder.getResult();
+    assertEquals(distinctResult.size(), 3);
+
+    ArrayAggDoubleFunction arrayAggDoubleFunction = new ArrayAggDoubleFunction(
+        ExpressionContext.forIdentifier("myField"), false);
+    aggregationResultHolder = arrayAggDoubleFunction.createAggregationResultHolder();
+    arrayAggDoubleFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Double.create(null, new double[]{1.0, 2.0})));
+    arrayAggDoubleFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Double.create(null, new double[]{2.0, 3.0})));
+    DoubleArrayList result = aggregationResultHolder.getResult();
+    assertEquals(result.size(), 4);
+  }
+
+  @Test
+  public void testLongArrayAggMultipleBlocks() {
+    ArrayAggDistinctLongFunction arrayAggDistinctLongFunction = new ArrayAggDistinctLongFunction(
+        ExpressionContext.forIdentifier("myField"), FieldSpec.DataType.LONG, false);
+    AggregationResultHolder aggregationResultHolder = arrayAggDistinctLongFunction.createAggregationResultHolder();
+    arrayAggDistinctLongFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Long.create(null, new long[]{1L, 2L})));
+    arrayAggDistinctLongFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Long.create(null, new long[]{2L, 3L})));
+    LongOpenHashSet distinctResult = aggregationResultHolder.getResult();
+    assertEquals(distinctResult.size(), 3);
+
+    ArrayAggLongFunction arrayAggLongFunction = new ArrayAggLongFunction(
+        ExpressionContext.forIdentifier("myField"), FieldSpec.DataType.LONG, false);
+    aggregationResultHolder = arrayAggLongFunction.createAggregationResultHolder();
+    arrayAggLongFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Long.create(null, new long[]{1L, 2L})));
+    arrayAggLongFunction.aggregate(2, aggregationResultHolder,
+        Map.of(ExpressionContext.forIdentifier("myField"),
+            SyntheticBlockValSets.Long.create(null, new long[]{1L, 2L})));
+    LongArrayList result = aggregationResultHolder.getResult();
+    assertEquals(result.size(), 4);
+  }
 }
diff --git a/pinot-perf/pom.xml b/pinot-perf/pom.xml
index cdda3f091b..48031356c8 100644
--- a/pinot-perf/pom.xml
+++ b/pinot-perf/pom.xml
@@ -56,6 +56,11 @@
       <artifactId>pinot-common</artifactId>
       <type>test-jar</type>
     </dependency>
+    <dependency>
+      <groupId>org.apache.pinot</groupId>
+      <artifactId>pinot-core</artifactId>
+      <type>test-jar</type>
+    </dependency>
     <dependency>
       <groupId>org.apache.pinot</groupId>
       <artifactId>pinot-segment-local</artifactId>
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkAvgAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkAvgAggregation.java
index 78e92acaeb..fcc54153bc 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkAvgAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkAvgAggregation.java
@@ -24,11 +24,11 @@ import java.util.Random;
 import java.util.concurrent.TimeUnit;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.AvgAggregationFunction;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkDistinctCountAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkDistinctCountAggregation.java
index dd2da3865d..eabc54c5bb 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkDistinctCountAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkDistinctCountAggregation.java
@@ -25,11 +25,11 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.IntStream;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.DistinctCountAggregationFunction;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkMinAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkMinAggregation.java
index 9bf6eb07e9..279e77e7a8 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkMinAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkMinAggregation.java
@@ -24,11 +24,11 @@ import java.util.Random;
 import java.util.concurrent.TimeUnit;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.MinAggregationFunction;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkModeAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkModeAggregation.java
index 5a900ee388..7edfd35142 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkModeAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkModeAggregation.java
@@ -27,11 +27,11 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.LongSupplier;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.ModeAggregationFunction;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkSumAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkSumAggregation.java
index 00b9381c75..c01e3be1c8 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkSumAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkSumAggregation.java
@@ -24,11 +24,11 @@ import java.util.Random;
 import java.util.concurrent.TimeUnit;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.SumAggregationFunction;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
diff --git a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkVarianceAggregation.java b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkVarianceAggregation.java
index 744ef1afd6..882195600c 100644
--- a/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkVarianceAggregation.java
+++ b/pinot-perf/src/main/java/org/apache/pinot/perf/aggregation/BenchmarkVarianceAggregation.java
@@ -27,12 +27,12 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import org.apache.pinot.common.request.context.ExpressionContext;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.SyntheticBlockValSets;
 import org.apache.pinot.core.plan.DocIdSetPlanNode;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import org.apache.pinot.core.query.aggregation.function.VarianceAggregationFunction;
 import org.apache.pinot.core.query.aggregation.utils.StatisticalAggregationFunctionUtils;
-import org.apache.pinot.perf.SyntheticBlockValSets;
 import org.apache.pinot.perf.SyntheticNullBitmapFactories;
 import org.apache.pinot.segment.spi.AggregationFunctionType;
 import org.openjdk.jmh.annotations.BenchmarkMode;


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