private void traverseAndSetValues(Partition part, PartitionFieldNode root, Object[] row,
      PartitionFieldValueSetter valueSetter) throws MetaException {
    // if root is null or is multiValued, do not recurse further
    // multi-valued fields are set separately in setMultiValuedFields method
    if (root == null || root.isMultiValued()) {
      return;
    }
    if (root.isLeafNode()) {
      valueSetter.setValue(part, root, row[root.fieldIndex]);
      return;
    }
    for (PartitionFieldNode child : root.children) {
      traverseAndSetValues(part, child, row, valueSetter);
    }
  }
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