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