<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="bigqueryreservation_v1alpha2.html">BigQuery Reservation API</a> . <a href="bigqueryreservation_v1alpha2.projects.html">projects</a> . <a href="bigqueryreservation_v1alpha2.projects.locations.html">locations</a> . <a href="bigqueryreservation_v1alpha2.projects.locations.reservations.html">reservations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="bigqueryreservation_v1alpha2.projects.locations.reservations.slotPools.html">slotPools()</a></code>
</p>
<p class="firstline">Returns the slotPools Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, reservationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new reservation resource. Multiple reservations are created if the ancestor reservations do not exist.</p>
<p class="toc_element">
  <code><a href="#createReservation">createReservation(parent, body=None, reservationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new reservation resource. Multiple reservations are created if the ancestor reservations do not exist.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, force=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a reservation. Returns `google.rpc.Code.FAILED_PRECONDITION` in the following cases: 1. When reservation has child reservations. This check can be bypassed by setting DeleteReservationRequest.force flag to true. 2. When top-level reservation with slot pools is being deleted.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns information about the reservation.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, filter=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the reservations for the project in the specified location.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing reservation resource. Applicable only for child reservations.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, reservationId=None, x__xgafv=None)</code>
  <pre>Creates a new reservation resource. Multiple reservations are created if the ancestor reservations do not exist.

Args:
  parent: string, Project, location, and (optionally) reservation name. E.g., projects/myproject/locations/us-central1/reservations/parent (required)
  body: object, The request body.
    The object takes the form of:

{ # A reservation is a mechanism used to guarantee slots to users.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
  &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
}

  reservationId: string, The reservation ID relative to the parent, e.g., &quot;dev&quot;. This field must only contain alphanumeric characters.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A reservation is a mechanism used to guarantee slots to users.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
    &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
    &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
  }</pre>
</div>

<div class="method">
    <code class="details" id="createReservation">createReservation(parent, body=None, reservationId=None, x__xgafv=None)</code>
  <pre>Creates a new reservation resource. Multiple reservations are created if the ancestor reservations do not exist.

Args:
  parent: string, Project, location, and (optionally) reservation name. E.g., projects/myproject/locations/us-central1/reservations/parent (required)
  body: object, The request body.
    The object takes the form of:

{ # A reservation is a mechanism used to guarantee slots to users.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
  &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
}

  reservationId: string, The reservation ID relative to the parent, e.g., &quot;dev&quot;. This field must only contain alphanumeric characters.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A reservation is a mechanism used to guarantee slots to users.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
    &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
    &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, force=None, x__xgafv=None)</code>
  <pre>Deletes a reservation. Returns `google.rpc.Code.FAILED_PRECONDITION` in the following cases: 1. When reservation has child reservations. This check can be bypassed by setting DeleteReservationRequest.force flag to true. 2. When top-level reservation with slot pools is being deleted.

Args:
  name: string, Resource name of the reservation to retrieve. E.g., projects/myproject/locations/us-central1/reservations/my_reservation (required)
  force: boolean, If true, deletes all the child reservations of the given reservation. Otherwise, attempting to delete a reservation that has child reservations will fail with error code `google.rpc.Code.FAILED_PRECONDITION`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns information about the reservation.

Args:
  name: string, Resource name of the reservation to retrieve. E.g., projects/myproject/locations/us-central1/reservations/path/to/reserv (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A reservation is a mechanism used to guarantee slots to users.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
    &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
    &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, filter=None, x__xgafv=None)</code>
  <pre>Lists all the reservations for the project in the specified location.

Args:
  parent: string, The parent resource name containing project and location, e.g.: &quot;projects/myproject/locations/us-central1&quot; (required)
  pageSize: integer, The maximum number of items to return.
  pageToken: string, The next_page_token value returned from a previous List request, if any.
  filter: string, Can be used to filter out reservations based on names, capacity, etc, e.g.: filter=&quot;reservation.slot_capacity &gt; 200&quot; filter=&quot;reservation.name = \&quot;*dev/*\&quot;&quot; Advanced filtering syntax can be [here](https://cloud.google.com/logging/docs/view/advanced-filters).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for ReservationService.ListReservations.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
    &quot;reservations&quot;: [ # List of reservations visible to the user.
      { # A reservation is a mechanism used to guarantee slots to users.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
        &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
        &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing reservation resource. Applicable only for child reservations.

Args:
  name: string, The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A reservation is a mechanism used to guarantee slots to users.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
  &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
}

  updateMask: string, Standard field mask for the set of fields to be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A reservation is a mechanism used to guarantee slots to users.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., &quot;projects/*/locations/*/reservations/dev/team/product&quot;. Reservation names (e.g., &quot;dev/team/product&quot;) exceeding a depth of six will fail with `google.rpc.Code.INVALID_ARGUMENT`.
    &quot;slotCapacity&quot;: &quot;A String&quot;, # Maximum slots available to this reservation and its children. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. In a scan of a multi-partitioned table, a single slot operates on a single partition of the table. If the new reservation&#x27;s slot capacity exceed the parent&#x27;s slot capacity or if total slot capacity of the new reservation and its siblings exceeds the parent&#x27;s slot capacity, the request will fail with `google.rpc.Code.RESOURCE_EXHAUSTED`.
    &quot;useParentReservation&quot;: True or False, # If true, any query using this reservation will also be submitted to the parent reservation. This allows the query to share the additional slot capacity of the parent with other queries in the parent reservation. If the parent also has this field set to true, then this process will continue until it encounters a reservation for which this is false. If false, a query using this reservation will execute with the maximum slot capacity as specified above. If not specified, default value is true. Ignored for top-level reservation.
  }</pre>
</div>

</body></html>