private static void validateSchemaFields(Schema schema, List<String> requiredFields) {
    Set<String> existingFields =
        schema.columns().stream().map(Types.NestedField::name).collect(Collectors.toSet());
    for (String requiredField : requiredFields) {
      if (!existingFields.contains(requiredField)) {
        throw new IllegalArgumentException(
            "The required field in schema is missing: " + requiredField);
      }
    }
  }
Create an Iceberg Schema {@link Schema} from a {@link Schema} based on the given order of
fieldNames.

<p>{@link Schema#select(String...)} is not used because it returns a new Schema whose fields
are not in the same order as the incoming fields.

@param baseSchema a Schema on which loading is based
@param fieldNames a list of field names
@return a new Schema on which contain the fieldNames of the base schema.
amoro-format-iceberg/src/main/java/org/apache/amoro/utils/SchemaUtil.java