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.
---