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 f51c34fcbd Egalpin/skip indexes minor changes (#12514)
f51c34fcbd is described below

commit f51c34fcbd3fc922dd7ee603223c5783a363c2db
Author: Evan Galpin <[email protected]>
AuthorDate: Fri Mar 1 15:56:00 2024 -0800

    Egalpin/skip indexes minor changes (#12514)
---
 .../common/utils/config/QueryOptionsUtils.java     | 25 +++++++++---------
 .../common/utils/config/QueryOptionsUtilsTest.java | 22 ++++++++--------
 .../core/plan/maker/InstancePlanMakerImplV2.java   |  2 +-
 .../core/query/request/context/QueryContext.java   | 10 ++++----
 .../tests/OfflineClusterIntegrationTest.java       | 30 +++++++++++-----------
 .../apache/pinot/spi/utils/CommonConstants.java    |  2 +-
 6 files changed, 45 insertions(+), 46 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/utils/config/QueryOptionsUtils.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/utils/config/QueryOptionsUtils.java
index 881aa30b8a..2356d66e23 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/utils/config/QueryOptionsUtils.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/utils/config/QueryOptionsUtils.java
@@ -27,6 +27,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import javax.annotation.Nullable;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.pinot.spi.config.table.FieldConfig;
 import org.apache.pinot.spi.utils.CommonConstants;
 import 
org.apache.pinot.spi.utils.CommonConstants.Broker.Request.QueryOptionKey;
@@ -150,31 +151,31 @@ public class QueryOptionsUtils {
   }
 
   @Nullable
-  public static Map<String, Set<FieldConfig.IndexType>> 
getIndexSkipConfig(Map<String, String> queryOptions) {
-    // Example config:  indexSkipConfig='col1=inverted,range&col2=inverted'
-    String indexSkipConfigStr = 
queryOptions.get(QueryOptionKey.INDEX_SKIP_CONFIG);
-    if (indexSkipConfigStr == null) {
+  public static Map<String, Set<FieldConfig.IndexType>> 
getSkipIndexes(Map<String, String> queryOptions) {
+    // Example config:  skipIndexes='col1=inverted,range&col2=inverted'
+    String skipIndexesStr = queryOptions.get(QueryOptionKey.SKIP_INDEXES);
+    if (skipIndexesStr == null) {
       return null;
     }
 
-    String[] perColumnIndexSkip = indexSkipConfigStr.split("&");
-    Map<String, Set<FieldConfig.IndexType>> indexSkipConfig = new HashMap<>();
+    String[] perColumnIndexSkip = StringUtils.split(skipIndexesStr, '&');
+    Map<String, Set<FieldConfig.IndexType>> skipIndexes = new HashMap<>();
     for (String columnConf : perColumnIndexSkip) {
-      String[] conf = columnConf.split("=");
+      String[] conf = StringUtils.split(columnConf, '=');
       if (conf.length != 2) {
-        throw new RuntimeException("Invalid format for " + 
QueryOptionKey.INDEX_SKIP_CONFIG
-            + ". Example of valid format: SET 
indexSkipConfig='col1=inverted,range&col2=inverted'");
+        throw new RuntimeException("Invalid format for " + 
QueryOptionKey.SKIP_INDEXES
+            + ". Example of valid format: SET 
skipIndexes='col1=inverted,range&col2=inverted'");
       }
       String columnName = conf[0];
-      String[] indexTypes = conf[1].split(",");
+      String[] indexTypes = StringUtils.split(conf[1], ',');
 
       for (String indexType : indexTypes) {
-        indexSkipConfig.computeIfAbsent(columnName, k -> new HashSet<>())
+        skipIndexes.computeIfAbsent(columnName, k -> new HashSet<>())
             .add(FieldConfig.IndexType.valueOf(indexType.toUpperCase()));
       }
     }
 
-    return indexSkipConfig;
+    return skipIndexes;
   }
 
   @Nullable
diff --git 
a/pinot-common/src/test/java/org/apache/pinot/common/utils/config/QueryOptionsUtilsTest.java
 
b/pinot-common/src/test/java/org/apache/pinot/common/utils/config/QueryOptionsUtilsTest.java
index d23b98fa7b..4f0985569b 100644
--- 
a/pinot-common/src/test/java/org/apache/pinot/common/utils/config/QueryOptionsUtilsTest.java
+++ 
b/pinot-common/src/test/java/org/apache/pinot/common/utils/config/QueryOptionsUtilsTest.java
@@ -24,7 +24,6 @@ import java.util.Map;
 import java.util.Set;
 import org.apache.pinot.spi.config.table.FieldConfig;
 import org.apache.pinot.spi.utils.CommonConstants;
-import org.apache.pinot.sql.parsers.parser.ParseException;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -48,23 +47,22 @@ public class QueryOptionsUtilsTest {
   }
 
   @Test
-  public void testIndexSkipConfigParsing()
-      throws ParseException {
-    String indexSkipConfigStr = "col1=inverted,range&col2=sorted";
+  public void testSkipIndexesParsing() {
+    String skipIndexesStr = "col1=inverted,range&col2=sorted";
     Map<String, String> queryOptions =
-        
Map.of(CommonConstants.Broker.Request.QueryOptionKey.INDEX_SKIP_CONFIG, 
indexSkipConfigStr);
-    Map<String, Set<FieldConfig.IndexType>> indexSkipConfig = 
QueryOptionsUtils.getIndexSkipConfig(queryOptions);
-    Assert.assertEquals(indexSkipConfig.get("col1"),
+        Map.of(CommonConstants.Broker.Request.QueryOptionKey.SKIP_INDEXES, 
skipIndexesStr);
+    Map<String, Set<FieldConfig.IndexType>> skipIndexes = 
QueryOptionsUtils.getSkipIndexes(queryOptions);
+    Assert.assertEquals(skipIndexes.get("col1"),
         Set.of(FieldConfig.IndexType.RANGE, FieldConfig.IndexType.INVERTED));
-    Assert.assertEquals(indexSkipConfig.get("col2"),
+    Assert.assertEquals(skipIndexes.get("col2"),
         Set.of(FieldConfig.IndexType.SORTED));
   }
 
   @Test(expectedExceptions = RuntimeException.class)
-  public void testIndexSkipConfigParsingInvalid() {
-    String indexSkipConfigStr = "col1=inverted,range&col2";
+  public void testSkipIndexesParsingInvalid() {
+    String skipIndexesStr = "col1=inverted,range&col2";
     Map<String, String> queryOptions =
-        
Map.of(CommonConstants.Broker.Request.QueryOptionKey.INDEX_SKIP_CONFIG, 
indexSkipConfigStr);
-     QueryOptionsUtils.getIndexSkipConfig(queryOptions);
+        Map.of(CommonConstants.Broker.Request.QueryOptionKey.SKIP_INDEXES, 
skipIndexesStr);
+     QueryOptionsUtils.getSkipIndexes(queryOptions);
   }
 }
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
index 5d06a79b10..bf565e68e6 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
@@ -175,7 +175,7 @@ public class InstancePlanMakerImplV2 implements PlanMaker {
     // Set skipScanFilterReorder
     
queryContext.setSkipScanFilterReorder(QueryOptionsUtils.isSkipScanFilterReorder(queryOptions));
 
-    
queryContext.setIndexSkipConfig(QueryOptionsUtils.getIndexSkipConfig(queryOptions));
+    
queryContext.setSkipIndexes(QueryOptionsUtils.getSkipIndexes(queryOptions));
 
     // Set maxExecutionThreads
     int maxExecutionThreads;
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/QueryContext.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/QueryContext.java
index c2829b8175..22e25eadf3 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/QueryContext.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/QueryContext.java
@@ -126,7 +126,7 @@ public class QueryContext {
   // Whether server returns the final result
   private boolean _serverReturnFinalResult;
   // Collection of index types to skip per column
-  private Map<String, Set<FieldConfig.IndexType>> _indexSkipConfig;
+  private Map<String, Set<FieldConfig.IndexType>> _skipIndexes;
 
   private QueryContext(@Nullable String tableName, @Nullable QueryContext 
subquery,
       List<ExpressionContext> selectExpressions, boolean distinct, 
List<String> aliasList,
@@ -432,15 +432,15 @@ public class QueryContext {
         + ", _expressionOverrideHints=" + _expressionOverrideHints + ", 
_explain=" + _explain + '}';
   }
 
-  public void setIndexSkipConfig(Map<String, Set<FieldConfig.IndexType>> 
indexSkipConfig) {
-    _indexSkipConfig = indexSkipConfig;
+  public void setSkipIndexes(Map<String, Set<FieldConfig.IndexType>> 
skipIndexes) {
+    _skipIndexes = skipIndexes;
   }
 
   public boolean isIndexUseAllowed(String columnName, FieldConfig.IndexType 
indexType) {
-    if (_indexSkipConfig == null) {
+    if (_skipIndexes == null) {
       return true;
     }
-    return !_indexSkipConfig.getOrDefault(columnName, 
Collections.EMPTY_SET).contains(indexType);
+    return !_skipIndexes.getOrDefault(columnName, 
Collections.EMPTY_SET).contains(indexType);
   }
 
   public boolean isIndexUseAllowed(DataSource dataSource, 
FieldConfig.IndexType indexType) {
diff --git 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
index 8c62a0e4dd..45ed49343c 100644
--- 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
+++ 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
@@ -94,7 +94,7 @@ import org.testng.annotations.Test;
 import static org.apache.pinot.common.function.scalar.StringFunctions.*;
 import static 
org.apache.pinot.controller.helix.core.PinotHelixResourceManager.EXTERNAL_VIEW_CHECK_INTERVAL_MS;
 import static 
org.apache.pinot.controller.helix.core.PinotHelixResourceManager.EXTERNAL_VIEW_ONLINE_SEGMENTS_MAX_WAIT_MS;
-import static 
org.apache.pinot.spi.utils.CommonConstants.Broker.Request.QueryOptionKey.INDEX_SKIP_CONFIG;
+import static 
org.apache.pinot.spi.utils.CommonConstants.Broker.Request.QueryOptionKey.SKIP_INDEXES;
 import static org.testng.Assert.*;
 
 
@@ -3287,12 +3287,12 @@ public class OfflineClusterIntegrationTest extends 
BaseClusterIntegrationTestSet
     testQuery("SELECT BOOL_OR(CAST(Diverted AS BOOLEAN)) FROM mytable");
   }
 
-  private String buildIndexSkipConfig(String columnsAndIndexes) {
-    return "SET " + INDEX_SKIP_CONFIG + "='" + columnsAndIndexes + "'; ";
+  private String buildSkipIndexesOption(String columnsAndIndexes) {
+    return "SET " + SKIP_INDEXES + "='" + columnsAndIndexes + "'; ";
   }
 
   @Test(dataProvider = "useBothQueryEngines")
-  public void testIndexSkipConfig(boolean useMultiStageQueryEngine)
+  public void testSkipIndexes(boolean useMultiStageQueryEngine)
       throws Exception {
     setUseMultiStageQueryEngine(useMultiStageQueryEngine);
     long numTotalDocs = getCountStarResult();
@@ -3306,32 +3306,32 @@ public class OfflineClusterIntegrationTest extends 
BaseClusterIntegrationTestSet
     
assertEquals(postQuery(TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(),
 0L);
 
     // disallow use of range index on DivActualElapsedTime, inverted should be 
unaffected
-    String indexSkipConf = buildIndexSkipConfig("DivActualElapsedTime=range");
+    String skipIndexes = buildSkipIndexesOption("DivActualElapsedTime=range");
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
0L);
+        skipIndexes + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
0L);
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
+        skipIndexes + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
 
     // disallow use of inverted index on DivActualElapsedTime, range should be 
unaffected
-    indexSkipConf = buildIndexSkipConfig("DivActualElapsedTime=inverted");
+    skipIndexes = buildSkipIndexesOption("DivActualElapsedTime=inverted");
     // Confirm that inverted index is not used
-    assertFalse(postQuery(indexSkipConf + " EXPLAIN PLAN FOR " + 
TEST_UPDATED_INVERTED_INDEX_QUERY).toString()
+    assertFalse(postQuery(skipIndexes + " EXPLAIN PLAN FOR " + 
TEST_UPDATED_INVERTED_INDEX_QUERY).toString()
         .contains("FILTER_INVERTED_INDEX"));
 
     // EQ predicate type allows for using range index if one exists, even if 
inverted index is skipped. That is why
     // we still see no docs scanned even though we skip the inverted index. 
This is a good test to show that using
-    // the indexSkipConfig can allow fine-grained experimentation of index 
usage at query time.
+    // the skipIndexes can allow fine-grained experimentation of index usage 
at query time.
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
0L);
+        skipIndexes + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
0L);
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 0L);
+        skipIndexes + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 0L);
 
     // disallow use of both range and inverted indexes on 
DivActualElapsedTime, neither should be used at query time
-    indexSkipConf = 
buildIndexSkipConfig("DivActualElapsedTime=inverted,range");
+    skipIndexes = 
buildSkipIndexesOption("DivActualElapsedTime=inverted,range");
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
+        skipIndexes + 
TEST_UPDATED_INVERTED_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
     assertEquals(postQuery(
-        indexSkipConf + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
+        skipIndexes + 
TEST_UPDATED_RANGE_INDEX_QUERY).get("numEntriesScannedInFilter").asLong(), 
numTotalDocs);
 
     // Update table config to remove the new indexes, and check if the new 
indexes are removed
     TableConfig tableConfig = getOfflineTableConfig();
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
index dfe625bfef..238af43595 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
@@ -360,7 +360,7 @@ public class CommonConstants {
         public static final String SERVER_RETURN_FINAL_RESULT = 
"serverReturnFinalResult";
         // Reorder scan based predicates based on cardinality and number of 
selected values
         public static final String AND_SCAN_REORDERING = "AndScanReordering";
-        public static final String INDEX_SKIP_CONFIG = "indexSkipConfig";
+        public static final String SKIP_INDEXES = "skipIndexes";
 
         public static final String ORDER_BY_ALGORITHM = "orderByAlgorithm";
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to