You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by "gortiz (via GitHub)" <gi...@apache.org> on 2025/09/16 10:48:10 UTC

[PR] Add benchmark for equi-join queries with various configurations [pinot]

gortiz opened a new pull request, #16825:
URL: https://github.com/apache/pinot/pull/16825

   Simple PR including a new benchmark. This benchmark is similar to BenchmarkQueriesMSQE, which means it starts a single process cluster. This also means it has some issues to stop each benchmark JVM, given that some threads are leaked. This is a well-known issue of the BaseClusterIntegrationTest that should be fixed on another PR.
   
   Results on my local machine are:
   ```
   Benchmark                                     (_segments)  (_uRatio)  Mode  Cnt    Score    Error  Units
   BenchmarkEquiJoin.countJoinOneHundredthInt             10          1  avgt    5   56.711 ±  5.626  ms/op
   BenchmarkEquiJoin.countJoinOneHundredthStr             10          1  avgt    5   72.056 ±  7.494  ms/op
   BenchmarkEquiJoin.projectJoinOneHundredthInt           10          1  avgt    5  159.860 ±  8.283  ms/op
   BenchmarkEquiJoin.projectJoinOneHundredthStr           10          1  avgt    5  205.084 ± 15.702  ms/op
   ```


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]

Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #16825:
URL: https://github.com/apache/pinot/pull/16825#issuecomment-3298704750

   ## [Codecov](https://app.codecov.io/gh/apache/pinot/pull/16825?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 56.12%. Comparing base ([`d45f508`](https://app.codecov.io/gh/apache/pinot/commit/d45f508a7b34df52376bf8aa6015f132f6fa96d3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`a0df109`](https://app.codecov.io/gh/apache/pinot/commit/a0df109c5484d4b6b6e27bcaaf17abd3cec6e896?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   :warning: Report is 22 commits behind head on master.
   > :exclamation:  There is a different number of reports uploaded between BASE (d45f508) and HEAD (a0df109). Click for more details.
   > 
   > <details><summary>HEAD has 36 uploads less than BASE</summary>
   >
   >| Flag | BASE (d45f508) | HEAD (a0df109) |
   >|------|------|------|
   >|java-21|5|1|
   >|unittests1|2|1|
   >|unittests|4|1|
   >|temurin|10|1|
   >|unittests2|2|0|
   >|integration|6|0|
   >|integration1|2|0|
   >|java-11|5|0|
   >|custom-integration1|2|0|
   >|integration2|2|0|
   ></details>
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##             master   #16825      +/-   ##
   ============================================
   - Coverage     63.36%   56.12%   -7.25%     
   + Complexity     1399      700     -699     
   ============================================
     Files          3054     2396     -658     
     Lines        178909   133224   -45685     
     Branches      27419    21198    -6221     
   ============================================
   - Hits         113374    74773   -38601     
   + Misses        56805    52197    -4608     
   + Partials       8730     6254    -2476     
   ```
   
   | [Flag](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [custom-integration1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration2](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [java-11](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [java-21](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.19%)` | :arrow_down: |
   | [temurin](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.25%)` | :arrow_down: |
   | [unittests](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.25%)` | :arrow_down: |
   | [unittests1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-0.22%)` | :arrow_down: |
   | [unittests2](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
   </details>
   
   [:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/pinot/pull/16825?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).   
   :loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]

Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #16825:
URL: https://github.com/apache/pinot/pull/16825#discussion_r2352424081


##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+  public static void main(String[] args)
+      throws Exception {
+    ChainedOptionsBuilder opt = new OptionsBuilder()
+        .include(BenchmarkEquiJoin.class.getSimpleName())
+        .addProfiler(GCProfiler.class);
+    new Runner(opt.build()).run();
+  }
+
+  /// Number of rows on each segment
+  private int _rowsPerSegment = 100_000;
+  @Param({"10"})
+  private int _segments;
+
+  /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+  ///
+  /// The lower the [#_uRatio], the more rows will match in the join.
+  /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+  /// random number generator to create the data.
+  //@Param({"1", "0.1", "0.01"})
+  @Param({"1"})
+  private double _uRatio;
+
+  private JsonNode query(String query)
+      throws Exception {
+    JsonNode result = postQuery(query,
+        ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+        null,
+        getExtraQueryProperties());
+    JsonNode exceptions = result.get("exceptions").get(0);
+    if (exceptions != null) {
+      throw new RuntimeException(exceptions.get("message").asText());
+    }
+    return result.get("resultTable").get("rows");
+  }
+
+  @Override
+  protected Map<String, String> getExtraQueryProperties() {
+    return Map.of("useMultistageEngine", "true", "dropResults", "true");
+  }
+
+  /// Executes a query where [#_rowsPerSegment] left rows are joined by int with [#_rowsPerSegment]/100 right rows
+  /// and then counted
+  @Benchmark
+  public JsonNode countJoinOneHundredthInt()
+      throws Exception {
+    @Language("sql")
+    String query = "SET useMultistageEngine=true;"
+        + "SET maxRowsInJoin=1000000000;"
+        + "SELECT count(*) "
+        + "FROM MyTable t1 "
+        + "JOIN MyTable t2 "
+        + "ON t1.intCol = t2.intCol "
+        + "WHERE t2.intCol % 10 = 0";
+    ;

Review Comment:
   Remove the unnecessary semicolon on line 127. It serves no purpose and reduces code readability.
   ```suggestion
   
   ```



##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+  public static void main(String[] args)
+      throws Exception {
+    ChainedOptionsBuilder opt = new OptionsBuilder()
+        .include(BenchmarkEquiJoin.class.getSimpleName())
+        .addProfiler(GCProfiler.class);
+    new Runner(opt.build()).run();
+  }
+
+  /// Number of rows on each segment
+  private int _rowsPerSegment = 100_000;
+  @Param({"10"})
+  private int _segments;
+
+  /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+  ///
+  /// The lower the [#_uRatio], the more rows will match in the join.
+  /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+  /// random number generator to create the data.
+  //@Param({"1", "0.1", "0.01"})
+  @Param({"1"})
+  private double _uRatio;
+
+  private JsonNode query(String query)
+      throws Exception {
+    JsonNode result = postQuery(query,
+        ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+        null,
+        getExtraQueryProperties());
+    JsonNode exceptions = result.get("exceptions").get(0);
+    if (exceptions != null) {
+      throw new RuntimeException(exceptions.get("message").asText());
+    }
+    return result.get("resultTable").get("rows");
+  }
+
+  @Override
+  protected Map<String, String> getExtraQueryProperties() {
+    return Map.of("useMultistageEngine", "true", "dropResults", "true");
+  }
+
+  /// Executes a query where [#_rowsPerSegment] left rows are joined by int with [#_rowsPerSegment]/100 right rows
+  /// and then counted
+  @Benchmark
+  public JsonNode countJoinOneHundredthInt()
+      throws Exception {
+    @Language("sql")
+    String query = "SET useMultistageEngine=true;"
+        + "SET maxRowsInJoin=1000000000;"

Review Comment:
   The hardcoded value '1000000000' for maxRowsInJoin should be extracted as a named constant to improve maintainability and make it easier to adjust across different benchmark methods.



##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+  public static void main(String[] args)
+      throws Exception {
+    ChainedOptionsBuilder opt = new OptionsBuilder()
+        .include(BenchmarkEquiJoin.class.getSimpleName())
+        .addProfiler(GCProfiler.class);
+    new Runner(opt.build()).run();
+  }
+
+  /// Number of rows on each segment
+  private int _rowsPerSegment = 100_000;
+  @Param({"10"})
+  private int _segments;
+
+  /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+  ///
+  /// The lower the [#_uRatio], the more rows will match in the join.
+  /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+  /// random number generator to create the data.
+  //@Param({"1", "0.1", "0.01"})
+  @Param({"1"})
+  private double _uRatio;
+
+  private JsonNode query(String query)
+      throws Exception {
+    JsonNode result = postQuery(query,
+        ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+        null,
+        getExtraQueryProperties());
+    JsonNode exceptions = result.get("exceptions").get(0);
+    if (exceptions != null) {
+      throw new RuntimeException(exceptions.get("message").asText());

Review Comment:
   This code will throw a NullPointerException if the 'exceptions' array is empty. Check if the array has elements before accessing index 0, or use a safer approach to handle the exceptions array.
   ```suggestion
       JsonNode exceptionsNode = result.get("exceptions");
       if (exceptionsNode != null && exceptionsNode.isArray() && exceptionsNode.size() > 0) {
         JsonNode exception = exceptionsNode.get(0);
         if (exception != null && exception.has("message")) {
           throw new RuntimeException(exception.get("message").asText());
         }
   ```



-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]

Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 commented on code in PR #16825:
URL: https://github.com/apache/pinot/pull/16825#discussion_r2352422815


##########
pinot-perf/src/main/resources/log4j2-test.properties:
##########
@@ -0,0 +1,53 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+status = error
+name = PropertiesConfig
+
+# Appenders
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_OUT
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.controllerLog.type = RandomAccessFile
+appender.controllerLog.name = controllerLog
+appender.controllerLog.fileName = pinotController.log
+appender.controllerLog.immediateFlush = false
+appender.controllerLog.layout.type = PatternLayout
+appender.controllerLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.brokerLog.type = RandomAccessFile
+appender.brokerLog.name = brokerLog
+appender.brokerLog.fileName = pinotBroker.log
+appender.brokerLog.immediateFlush = false
+appender.brokerLog.layout.type = PatternLayout
+appender.brokerLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.serverLog.type = RandomAccessFile
+appender.serverLog.name = serverLog
+appender.serverLog.fileName = pinotServer.log
+appender.serverLog.immediateFlush = false
+appender.serverLog.layout.type = PatternLayout
+appender.serverLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+# Loggers
+rootLogger.level = error
+rootLogger.appenderRef.console.ref = console

Review Comment:
   nit: newline



-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]

Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 commented on PR #16825:
URL: https://github.com/apache/pinot/pull/16825#issuecomment-3298654525

   For single process cluster, would all mailbox become in-memory even between broker and server


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]

Posted by "gortiz (via GitHub)" <gi...@apache.org>.
gortiz merged PR #16825:
URL: https://github.com/apache/pinot/pull/16825


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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