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 cc92e4cf68 Max number of multi values should be set in 
DefaultNullValueProvider (#9205)
cc92e4cf68 is described below

commit cc92e4cf68e66a88b8f06c72eeb608d07c61f9e6
Author: Navina Ramesh <nav...@apache.org>
AuthorDate: Wed Aug 17 16:43:18 2022 -0700

    Max number of multi values should be set in DefaultNullValueProvider (#9205)
---
 .../integration/tests/BaseClusterIntegrationTestSet.java     |  5 +++++
 .../index/column/DefaultNullValueVirtualColumnProvider.java  | 12 ++++++++++--
 .../index/readers/constant/ConstantMVForwardIndexReader.java |  5 +++++
 .../local/segment/virtualcolumn/VirtualColumnContext.java    |  4 ++--
 .../column/DefaultNullValueVirtualColumnProviderTest.java    | 10 +++++-----
 5 files changed, 27 insertions(+), 9 deletions(-)

diff --git 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/BaseClusterIntegrationTestSet.java
 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/BaseClusterIntegrationTestSet.java
index 6d13e4a6bd..f4d9ef0b62 100644
--- 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/BaseClusterIntegrationTestSet.java
+++ 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/BaseClusterIntegrationTestSet.java
@@ -636,6 +636,11 @@ public abstract class BaseClusterIntegrationTestSet 
extends BaseClusterIntegrati
     assertEquals(resultTable.get("dataSchema").get("columnNames").size(), 
schema.size());
     assertEquals(resultTable.get("rows").size(), 10);
 
+    // Test aggregation query to include querying all segemnts (including 
realtime)
+    String aggregationQuery = "SELECT SUMMV(NewIntMVDimension) FROM " + 
rawTableName;
+    queryResponse = postQuery(aggregationQuery);
+    assertEquals(queryResponse.get("exceptions").size(), 0);
+
     // Test filter on all new added columns
     String countStarQuery = "SELECT COUNT(*) FROM " + rawTableName
         + " WHERE NewIntSVDimension < 0 AND NewLongSVDimension < 0 AND 
NewFloatSVDimension < 0 AND "
diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProvider.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProvider.java
index 5909ed27a0..aee86896ad 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProvider.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProvider.java
@@ -85,7 +85,15 @@ public class DefaultNullValueVirtualColumnProvider extends 
BaseVirtualColumnProv
 
   @Override
   public ColumnMetadataImpl buildMetadata(VirtualColumnContext context) {
-    return 
getColumnMetadataBuilder(context).setCardinality(1).setSorted(context.getFieldSpec().isSingleValueField())
-        .setHasDictionary(true).build();
+    ColumnMetadataImpl.Builder builder = 
getColumnMetadataBuilder(context).setCardinality(1).setHasDictionary(true);
+    if (context.getFieldSpec().isSingleValueField()) {
+      builder.setSorted(true);
+    } else {
+      // When there is no value for a multi-value column, the 
maxNumberOfMultiValues and cardinality should be
+      // set as 1 because the MV column bitmap uses 1 to delimit the rows for 
a MV column. Each MV column will have a
+      // default null value based on column's data type
+      builder.setMaxNumberOfMultiValues(1);
+    }
+    return builder.build();
   }
 }
diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/constant/ConstantMVForwardIndexReader.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/constant/ConstantMVForwardIndexReader.java
index 445d826ea4..2bea164138 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/constant/ConstantMVForwardIndexReader.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/constant/ConstantMVForwardIndexReader.java
@@ -43,6 +43,11 @@ public final class ConstantMVForwardIndexReader implements 
ForwardIndexReader<Fo
     return DataType.INT;
   }
 
+  /*
+   * Asserting on dictIdBuffer being non-empty is done on purpose here as this 
reader is used in the query hot path and
+   * it would be prohibitively expensive.
+   * It is always assumed that the dictIdBuffer is set correctly based on the 
maxNumberOfMultiValues column metadata.
+   */
   @Override
   public int getDictIdMV(int docId, int[] dictIdBuffer, 
ForwardIndexReaderContext context) {
     dictIdBuffer[0] = 0;
diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/virtualcolumn/VirtualColumnContext.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/virtualcolumn/VirtualColumnContext.java
index d42f677fe0..c2616d2796 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/virtualcolumn/VirtualColumnContext.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/virtualcolumn/VirtualColumnContext.java
@@ -26,8 +26,8 @@ import org.apache.pinot.spi.data.FieldSpec;
  * It will be used to build various components (dictionary, reader, etc) in 
the virtual column provider.
  */
 public class VirtualColumnContext {
-  private FieldSpec _fieldSpec;
-  private int _totalDocCount;
+  private final FieldSpec _fieldSpec;
+  private final int _totalDocCount;
 
   public VirtualColumnContext(FieldSpec fieldSpec, int totalDocCount) {
     _fieldSpec = fieldSpec;
diff --git 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProviderTest.java
 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProviderTest.java
index 4c25b8e910..0b44ef3870 100644
--- 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProviderTest.java
+++ 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/column/DefaultNullValueVirtualColumnProviderTest.java
@@ -76,23 +76,23 @@ public class DefaultNullValueVirtualColumnProviderTest {
 
     assertEquals(new DefaultNullValueVirtualColumnProvider().buildMetadata(new 
VirtualColumnContext(MV_INT, 1)),
         new 
ColumnMetadataImpl.Builder().setFieldSpec(MV_INT).setTotalDocs(1).setCardinality(1).setSorted(false)
-            .setHasDictionary(true).build());
+            .setHasDictionary(true).setMaxNumberOfMultiValues(1).build());
 
     assertEquals(new DefaultNullValueVirtualColumnProvider().buildMetadata(new 
VirtualColumnContext(MV_LONG, 1)),
         new 
ColumnMetadataImpl.Builder().setFieldSpec(MV_LONG).setTotalDocs(1).setCardinality(1).setSorted(false)
-            .setHasDictionary(true).build());
+            .setHasDictionary(true).setMaxNumberOfMultiValues(1).build());
 
     assertEquals(new DefaultNullValueVirtualColumnProvider().buildMetadata(new 
VirtualColumnContext(MV_FLOAT, 1)),
         new 
ColumnMetadataImpl.Builder().setFieldSpec(MV_FLOAT).setTotalDocs(1).setCardinality(1).setSorted(false)
-            .setHasDictionary(true).build());
+            .setHasDictionary(true).setMaxNumberOfMultiValues(1).build());
 
     assertEquals(new DefaultNullValueVirtualColumnProvider().buildMetadata(new 
VirtualColumnContext(MV_DOUBLE, 1)),
         new 
ColumnMetadataImpl.Builder().setFieldSpec(MV_DOUBLE).setTotalDocs(1).setCardinality(1).setSorted(false)
-            .setHasDictionary(true).build());
+            .setHasDictionary(true).setMaxNumberOfMultiValues(1).build());
 
     assertEquals(new DefaultNullValueVirtualColumnProvider().buildMetadata(new 
VirtualColumnContext(MV_STRING, 1)),
         new 
ColumnMetadataImpl.Builder().setFieldSpec(MV_STRING).setTotalDocs(1).setCardinality(1).setSorted(false)
-            .setHasDictionary(true).build());
+            .setHasDictionary(true).setMaxNumberOfMultiValues(1).build());
   }
 
   @Test


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

Reply via email to