code: public OperationFuture<Void, UpdateDatabaseDdlMetadata> updateDdl(
        Iterable<String> statements, String operationId) throws SpannerException {
      return dbClient.updateDatabaseDdl(instance(), database(), statements, operationId);
    }
docs: Enqueues the given DDL statements to be applied, in order but not necessarily all at once, to
  the database schema at some point (or points) in the future. The server checks that the
  statements are executable (syntactically valid, name tables that exist, etc.) before enqueueing
  them, but they may still fail upon later execution (e.g., if a statement from another batch of
  statements is applied first and it conflicts in some way, or if there is some data-related
  problem like a `NULL` value in a column to which `NOT NULL` would be added). If a statement
  fails, all subsequent statements in the batch are automatically cancelled.
  
  @param operationId Operation id assigned to this operation. If null, system will autogenerate
  one. This must be unique within a database abd must be a valid identifier
  [a-zA-Z][a-zA-Z0-9_]*.