code: public static <D extends Dataset<GenericRecord>> D update(String uri, DatasetDescriptor descriptor) {
      return Datasets.<GenericRecord, D>update(
          uri, descriptor, GenericRecord.class);
    }
docs: Update a {@link Dataset} for the given dataset or view URI string.
  <p>
  You can add columns, remove columns, or change the data type of columns
  in your dataset, provided you don't attempt a change that is incompatible
  with written data. Avro defines rules for compatible schema evolution. See
  <a href="http://kitesdk.org/docs/current/Schema-Evolution.html">Schema
  Evolution</a>.
  <p>
  This method updates the dataset descriptor, so you can also add
  or change properties.
  <p>
  The recommended way to update a dataset descriptor is to build it
  based on an existing descriptor. Use
  {@link DatasetDescriptor.Builder(DatasetDescriptor)} to
  build a DatasetDescriptor based on an existing instance.
  <p>
  You cannot change a dataset format or partition strategy.
  <p>
  URIs must begin with {@code dataset:}. The remainder of
  the URI is implementation specific, depending on the dataset scheme.
  
  @param uri a {@code Dataset} URI string
  @param <D> the type of {@code Dataset} expected
  @return a {@code Dataset} for the given URI
  @throws NullPointerException
  if {@code uri} or {@code descriptor} is {@code null}
  @throws IllegalArgumentException if {@code uri} is not a dataset URI
  @throws DatasetNotFoundException
  if there is no dataset for the given URI
  @throws UnsupportedOperationException
  if descriptor updates are not supported by the implementation
  @throws ConcurrentSchemaModificationException
  if the {@code Dataset} schema is updated concurrently
  @throws IncompatibleSchemaException
  if the schema is not compatible with previous schemas, or with
  existing datasets with shared storage (for example, in the same
  HBase table)