private int getSingleValuedColumnName(PartitionFieldNode root, int fieldId,
      final List<String> columnNames) {
    if (root == null) {
      return fieldId;
    }
    if (root.isLeafNode() && !root.isMultiValued) {
      if (fieldNameToTableName.containsKey(root.fieldName)) {
        columnNames.add(fieldNameToTableName.get(root.fieldName));
        root.setFieldIndex(fieldId++);
        return fieldId;
      }
      throw new RuntimeException(
          "No column name mapping found for partition field " + root.fieldName);
    }
    for (PartitionFieldNode child : root.children) {
      fieldId = getSingleValuedColumnName(child, fieldId, columnNames);
    }
    return fieldId;
  }
Given a list of partition ids, returns the List of partially filled partitions based on the
projection list used to instantiate this PartitionProjectionEvaluator
@param partitionIds List of partition ids corresponding to the Partitions objects which are requested
@return Partitions where each partition has only the projected fields set
@throws MetaException
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PartitionProjectionEvaluator.java