public static boolean precheckFullOuter(HiveConf hiveConf, JoinOperator joinOp)
      throws SemanticException {
    JoinDesc joinDesc = joinOp.getConf();
    JoinCondDesc[] conds = joinDesc.getConds();

    /*
     * Are we even being asked to do a FULL OUTER JOIN?
     */
    boolean hasFullOuterJoin = false;
    for (JoinCondDesc cond : conds) {
      if (cond.getType() == JoinDesc.FULL_OUTER_JOIN) {
        hasFullOuterJoin = true;
        break;
      }
    }
    if (!hasFullOuterJoin) {
      return false;
    }

    if (conds.length > 1) {

      // No multiple condition FULL OUTER MapJoin.
      LOG.debug("FULL OUTER MapJoin not enabled: multiple JOIN conditions not supported");
      return false;
    }

    return true;
  }
convert a regular join to a a map-side join.

@param op
         join operator
@param mapJoinPos
         position of the source to be read as part of map-reduce framework. All other sources
         are cached in memory
@param noCheckOuterJoin
@param validateMapJoinTree
ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java