docs: def update(self, friendly_name=None, description=None, expiry=None, schema=None):
      """ Selectively updates Table information.
  
      Any parameters that are omitted or None are not updated.
  
      Args:
        friendly_name: if not None, the new friendly name.
        description: if not None, the new description.
        expiry: if not None, the new expiry time, either as a DateTime or milliseconds since epoch.
        schema: if not None, the new schema: either a list of dictionaries or a Schema.
      """
      self._load_info()
      if friendly_name is not None:
        self._info['friendlyName'] = friendly_name
      if description is not None:
        self._info['description'] = description
      if expiry is not None:
        if isinstance(expiry, datetime.datetime):
          expiry = calendar.timegm(expiry.utctimetuple()) * 1000
        self._info['expirationTime'] = expiry
      if schema is not None:
        if isinstance(schema, _schema.Schema):
          schema = schema._bq_schema
        self._info['schema'] = {'fields': schema}
      try:
        self._api.table_update(self._name_parts, self._info)
      except datalab.utils.RequestException:
        # The cached metadata is out of sync now; abandon it.
        self._info = None
      except Exception as e:
        raise e