Github user xuchuanyin commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2781#discussion_r221177988
  
    --- Diff: 
datamap/bloom/src/main/java/org/apache/carbondata/datamap/bloom/BloomCoarseGrainDataMap.java
 ---
    @@ -194,16 +186,25 @@ private String getAncestorTablePath(CarbonTable 
currentTable) {
               // skip shard which has been pruned in Main datamap
               continue;
             }
    -        boolean scanRequired = bloomFilter.membershipTest(new 
Key(bloomQueryModel.filterValue));
    -        if (scanRequired) {
    -          LOGGER.debug(String.format("BloomCoarseGrainDataMap: Need to 
scan -> blocklet#%s",
    -              String.valueOf(bloomFilter.getBlockletNo())));
    -          Blocklet blocklet = new Blocklet(bloomFilter.getShardName(),
    -                  String.valueOf(bloomFilter.getBlockletNo()));
    -          hitBlocklets.add(blocklet);
    +        for (byte[] value: bloomQueryModel.filterValues) {
    +          boolean scanRequired = bloomFilter.membershipTest(new 
Key(value));
    +          if (scanRequired) {
    +            LOGGER.debug(String.format("BloomCoarseGrainDataMap: Need to 
scan -> blocklet#%s",
    +                String.valueOf(bloomFilter.getBlockletNo())));
    +            Blocklet blocklet = new Blocklet(bloomFilter.getShardName(),
    +                String.valueOf(bloomFilter.getBlockletNo()));
    +            tempHitBlockletsResult.add(blocklet);
    --- End diff --
    
    we can just break here if one of the values hit the blocklets -- this is a 
possible optimization for InExpression.
    please leave a comment here if you accept the suggestion.


---

Reply via email to