private static long extractBloomEntriesHint(List<ReduceSinkOperator> sjBranches) {
    long bloomEntries = -1;
    for (ReduceSinkOperator rs : sjBranches) {
      GroupByOperator gbOp = OperatorUtils.ancestor(rs, GroupByOperator.class, 0, 0, 0);
      List<GenericUDAFBloomFilterEvaluator> blooms =
          FunctionUtils.extractEvaluators(gbOp.getConf().getAggregators(), GenericUDAFBloomFilterEvaluator.class);
      Preconditions.checkState(blooms.size() == 1);
      if (blooms.get(0).hasHintEntries()) {
        bloomEntries = Math.max(bloomEntries, blooms.get(0).getExpectedEntries());
      }
    }
    return bloomEntries;
  }
Extracts a hint about the number of expected entries in the composite bloom filter from the hints in the specified
(single column) semijoin branches.
<p>
If none of the individual semijoin branches has hints then the method returns -1, otherwise it returns the max.
</p>
ql/src/java/org/apache/hadoop/hive/ql/optimizer/SemiJoinReductionMerge.java