public static <T> Inner<T> fields(String... fields) {
    return fields(FieldAccessDescriptor.withFieldNames(fields));
  }
@Test
  @Category(NeedsRunner.class)
  public void testMaintainsOriginalSchemaOrder() {
    Schema expectedSchema =
        Schema.builder()
            .addFields(intFieldsRange(1, 10))
            .addFields(intFieldsRange(11, 19))
            .addFields(intFieldsRange(21, 55))
            .addFields(intFieldsRange(56, 100))
            .build();

    PCollection<Row> result =
        pipeline
            .apply(
                Create.of(
                        multipleIntRow(MULTIPLE_INT_SCHEMA, 1),
                        multipleIntRow(MULTIPLE_INT_SCHEMA, 2))
                    .withRowSchema(MULTIPLE_INT_SCHEMA))
            .apply(DropFields.fields("field0", "field10", "field19", "field20", "field55"));
    assertEquals(expectedSchema, result.getSchema());

    List<Row> expectedRows =
        Lists.newArrayList(multipleIntRow(expectedSchema, 1), multipleIntRow(expectedSchema, 2));
    PAssert.that(result).containsInAnyOrder(expectedRows);
    pipeline.run();
  }