public JoinUtil.JoinResult setFromOutput(Output output, MatchTracker matchTracker) {
      int keyHash = HashCodeUtil.murmurHash(output.getData(), 0, output.getLength());

      if (bloom1 != null && !bloom1.testLong(keyHash)) {
        /*
         * if the keyHash is missing in the bloom filter, then the value cannot
         * exist in any of the spilled partition - return NOMATCH
         */
        dummyRow = null;
        aliasFilter = (byte) 0xff;
        hashMapResult.forget();
        return JoinResult.NOMATCH;
      }

      partitionId = keyHash & (hashPartitions.length - 1);

      // If the target hash table is on disk, spill this row to disk as well to be processed later
      if (isOnDisk(partitionId)) {
        toSpillPartitionId = partitionId;
        hashMapResult.forget();
        return JoinUtil.JoinResult.SPILL;
      } else {
        aliasFilter = hashPartitions[partitionId].hashMap.getValueResult(
            output.getData(), 0, output.getLength(),
            hashMapResult,
            /* matchTracker */ null);
        dummyRow = null;
        if (hashMapResult.hasRows()) {
          return JoinUtil.JoinResult.MATCH;
        } else {
          aliasFilter = (byte) 0xff;
          return JoinUtil.JoinResult.NOMATCH;
        }
      }
    }
Sometimes, when container is empty in multi-table mapjoin, we need to add a dummy row.
This container does not normally support adding rows; this is for the dummy row.
ql/src/java/org/apache/hadoop/hive/ql/exec/persistence/HybridHashTableContainer.java