public static ReduceSinkDesc getReduceSinkDesc(
      List<ExprNodeDesc> keyCols, List<ExprNodeDesc> valueCols,
      List<String> outputColumnNames, boolean includeKey, int tag,
      int numPartitionFields, int numReducers, AcidUtils.Operation writeType,
      NullOrdering defaultNullOrder)
      throws SemanticException {
    return getReduceSinkDesc(keyCols, keyCols.size(), valueCols,
        new ArrayList<>(),
        includeKey ? outputColumnNames.subList(0, keyCols.size()) :
          new ArrayList<>(),
        includeKey ?
            outputColumnNames.subList(keyCols.size(), outputColumnNames.size())
            : outputColumnNames,
        includeKey, tag, numPartitionFields, numReducers, writeType, defaultNullOrder);
  }
Create the reduce sink descriptor.

@param keyCols
         The columns to be stored in the key
@param valueCols
         The columns to be stored in the value
@param outputColumnNames
         The output columns names
@param tag
         The tag for this reducesink
@param numPartitionFields
         The first numPartitionFields of keyCols will be partition columns.
         If numPartitionFields=-1, then partition randomly.
@param numReducers
         The number of reducers, set to -1 for automatic inference based on
         input data size.
@param writeType Whether this is an Acid write, and if so whether it is insert, update,
                 or delete.
@return The reduceSinkDesc object.
ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java