private static void getNestedFieldName(JsonNode jsonNode, String fieldName,
      Collection<String> results) {
    if (jsonNode instanceof ArrayNode) {
      Iterator<JsonNode> elements = ((ArrayNode) jsonNode).elements();
      if (!elements.hasNext()) {
        results.add(fieldName);
        return;
      }
      while (elements.hasNext()) {
        JsonNode element = elements.next();
        getNestedFieldName(element, fieldName, results);
      }
    } else {
      Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
      if (!fields.hasNext()) {
        results.add(fieldName);
        return;
      }
      while (fields.hasNext()) {
        Entry<String, JsonNode> fieldKV = fields.next();
        String key = fieldKV.getKey();
        getNestedFieldName(fieldKV.getValue(), fieldName.length() == 0 ? key : fieldName + "." + key,
            results);
      }
    }
  }
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