code: private static Schema createSchema(Schema schema, String fieldsStr) {
      List<String> fields = SPLITTER_ON_COMMA.splitToList(fieldsStr);
      TrieNode root = buildTrie(fields);
      return createSchemaHelper(schema, root);
    }
docs: Creates Schema containing only specified fields.
  
  Traversing via either fully qualified names or input Schema is quite inefficient as it's hard to align each other.
  Also, as Schema's fields is immutable, all the fields need to be collected before updating field in Schema. Figuring out all
  required field in just input Schema and fully qualified names is also not efficient as well.
  
  This is where Trie comes into picture. Having fully qualified names in Trie means, it is aligned with input schema and also it can
  provides all children on specific prefix. This solves two problems mentioned above.
  
  1. Based on fully qualified field name, build a Trie to present dependencies.
  2. Traverse the Trie. If it's leaf, add field. If it's not a leaf, recurse with child schema.
  
  @param schema
  @param fieldsStr
  @return