<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_v1beta1.html">BigQuery Reservation API</a> . <a href="bigqueryreservation_v1beta1.projects.html">projects</a> . <a href="bigqueryreservation_v1beta1.projects.locations.html">locations</a> . <a href="bigqueryreservation_v1beta1.projects.locations.reservations.html">reservations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="bigqueryreservation_v1beta1.projects.locations.reservations.assignments.html">assignments()</a></code>
</p>
<p class="firstline">Returns the assignments 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.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a reservation. Returns `google.rpc.Code.FAILED_PRECONDITION` when reservation has assignments.</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, filter=None, pageSize=None, pageToken=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.</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.

Args:
  parent: string, Required. Project, location. E.g., `projects/myproject/locations/US` (required)
  body: object, The request body.
    The object takes the form of:

{ # A reservation is a mechanism used to guarantee slots to users.
  &quot;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
  &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the reservation.
}

  reservationId: string, The reservation ID. This field must only contain lower case alphanumeric characters or dash. Max length is 64 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;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
  &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the reservation.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a reservation. Returns `google.rpc.Code.FAILED_PRECONDITION` when reservation has assignments.

Args:
  name: string, Required. Resource name of the reservation to retrieve. E.g., `projects/myproject/locations/US/reservations/team1-prod` (required)
  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, Required. Resource name of the reservation to retrieve. E.g., `projects/myproject/locations/US/reservations/team1-prod` (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;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
  &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the reservation.
}</pre>
</div>

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

Args:
  parent: string, Required. The parent resource name containing project and location, e.g.: `projects/myproject/locations/US` (required)
  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).
  pageSize: integer, The maximum number of items to return.
  pageToken: string, The next_page_token value returned from a previous List request, if any.
  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;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
      &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
      &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the 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.

Args:
  name: string, The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A reservation is a mechanism used to guarantee slots to users.
  &quot;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
  &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the 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;creationTime&quot;: &quot;A String&quot;, # Output only. Creation time of the reservation.
  &quot;ignoreIdleSlots&quot;: True or False, # If false, any query or pipeline job using this reservation will use idle slots from other reservations within the same admin project. If true, a query or pipeline job using this reservation will execute with the slot capacity specified in the slot_capacity field at most.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the reservation, e.g., `projects/*/locations/*/reservations/team1-prod`.
  &quot;slotCapacity&quot;: &quot;A String&quot;, # Minimum slots available to this reservation. A slot is a unit of computational power in BigQuery, and serves as the unit of parallelism. Queries using this reservation might use more slots during runtime if ignore_idle_slots is set to false. 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;updateTime&quot;: &quot;A String&quot;, # Output only. Last update time of the reservation.
}</pre>
</div>

</body></html>