<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="metastore_v1alpha.html">Dataproc Metastore API</a> . <a href="metastore_v1alpha.projects.html">projects</a> . <a href="metastore_v1alpha.projects.locations.html">locations</a> . <a href="metastore_v1alpha.projects.locations.services.html">services</a> . <a href="metastore_v1alpha.projects.locations.services.backups.html">backups</a></h1>
<h2>Instance Methods</h2>
<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, backupId=None, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new backup in a given project and location.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a single backup.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets details of a single backup.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists backups in a service.</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>
<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, backupId=None, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Creates a new backup in a given project and location.

Args:
  parent: string, Required. The relative resource name of the service in which to create a backup of the following form:projects/{project_number}/locations/{location_id}/services/{service_id}. (required)
  body: object, The request body.
    The object takes the form of:

{ # The details of a backup resource.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the backup was started.
  &quot;description&quot;: &quot;A String&quot;, # The description of the backup.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the backup finished creating.
  &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the backup, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}
  &quot;serviceRevision&quot;: { # A managed metastore service that serves metadata queries. # Output only. The revision of the service at the time of backup.
    &quot;artifactGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI (starting with gs://) that specifies where artifacts related to the metastore service are stored.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was created.
    &quot;endpointUri&quot;: &quot;A String&quot;, # Output only. The URI of the endpoint used to access the metastore service.
    &quot;hiveMetastoreConfig&quot;: { # Specifies configuration information specific to running Hive metastore software as the metastore service. # Configuration information specific to running Hive metastore software as the metastore service.
      &quot;configOverrides&quot;: { # A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in hive-site.xml). The mappings override system defaults (some keys cannot be overridden).
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;kerberosConfig&quot;: { # Configuration information for a Kerberos principal. # Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable Kerberos, use the UpdateService method and specify this field&#x27;s path (hive_metastore_config.kerberos_config) in the request&#x27;s update_mask while omitting this field from the request&#x27;s service.
        &quot;keytab&quot;: { # A securely stored value. # A Kerberos keytab file that can be used to authenticate a service principal with a Kerberos Key Distribution Center (KDC).
          &quot;cloudSecret&quot;: &quot;A String&quot;, # The relative resource name of a Secret Manager secret version, in the following form:projects/{project_number}/secrets/{secret_id}/versions/{version_id}.
        },
        &quot;krb5ConfigGcsUri&quot;: &quot;A String&quot;, # A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form gs://{bucket_name}/path/to/krb5.conf, although the file does not need to be named krb5.conf explicitly.
        &quot;principal&quot;: &quot;A String&quot;, # A Kerberos principal that exists in the both the keytab the KDC to authenticate as. A typical principal is of the form primary/instance@REALM, but there is no exact format.
      },
      &quot;version&quot;: &quot;A String&quot;, # Immutable. The Hive metastore schema version.
    },
    &quot;labels&quot;: { # User-defined labels for the metastore service.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maintenanceWindow&quot;: { # Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service. # The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance purposes in UTC time.
      &quot;dayOfWeek&quot;: &quot;A String&quot;, # The day of week, when the window starts.
      &quot;hourOfDay&quot;: 42, # The hour of day (0-23) when the window starts.
    },
    &quot;metadataIntegration&quot;: { # Specifies how metastore metadata should be integrated with external services. # The setting that defines how metastore metadata should be integrated with external services and systems.
      &quot;dataCatalogConfig&quot;: { # Specifies how metastore metadata should be integrated with the Data Catalog service. # The integration config for the Data Catalog service.
        &quot;enabled&quot;: True or False, # Defines whether the metastore metadata should be synced to Data Catalog. The default value is to disable syncing metastore metadata to Data Catalog.
      },
    },
    &quot;metadataManagementActivity&quot;: { # The metadata management activities of the metastore service. # Output only. The metadata management activities of the metastore service.
      &quot;metadataExports&quot;: [ # Output only. The latest metadata exports of the metastore service.
        { # The details of a metadata export operation.
          &quot;databaseDumpType&quot;: &quot;A String&quot;, # Output only. The type of the database dump.
          &quot;destinationGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI of a folder that metadata are exported to, in the form of gs:////, where is automatically generated.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the export ended.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the export started.
          &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the export.
        },
      ],
      &quot;restores&quot;: [ # Output only. The latest restores of the metastore service.
        { # The details of a metadata restore operation.
          &quot;backup&quot;: &quot;A String&quot;, # Output only. The relative resource name of the metastore service backup to restore from, in the following form:projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}.
          &quot;details&quot;: &quot;A String&quot;, # Output only. The restore details containing the revision of the service to be restored to, in format of JSON.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the restore ended.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the restore started.
          &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the restore.
          &quot;type&quot;: &quot;A String&quot;, # Output only. The type of restore.
        },
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the metastore service, of the form:projects/{project_number}/locations/{location_id}/services/{service_id}.
    &quot;network&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:projects/{project_number}/global/networks/{network_id}.
    &quot;port&quot;: 42, # The TCP port at which the metastore service is reached. Default: 9083.
    &quot;releaseChannel&quot;: &quot;A String&quot;, # Immutable. The release channel of the service. If unspecified, defaults to STABLE.
    &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the metastore service.
    &quot;stateMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current state of the metastore service, if available.
    &quot;tier&quot;: &quot;A String&quot;, # The tier of the service.
    &quot;uid&quot;: &quot;A String&quot;, # Output only. The globally unique resource identifier of the metastore service.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was last updated.
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the backup.
}

  backupId: string, Required. The ID of the backup, which is used as the final component of the backup&#x27;s name.This value must be between 1 and 64 characters long, begin with a letter, end with a letter or number, and consist of alpha-numeric ASCII characters or hyphens.
  requestId: string, Optional. A request ID. Specify a unique request ID to allow the server to ignore the request if it has completed. The server will ignore subsequent requests that provide a duplicate request ID for at least 60 minutes after the first request.For example, if an initial request times out, followed by another request with the same request ID, the server ignores the second request to prevent the creation of duplicate commitments.The request ID must be a valid UUID (https://en.wikipedia.org/wiki/Universally_unique_identifier#Format) A zero UUID (00000000-0000-0000-0000-000000000000) is not supported.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is false, it means the operation is still in progress. If true, the operation is completed, and either error or response is available.
  &quot;error&quot;: { # The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC (https://github.com/grpc). Each Status message contains three pieces of data: error code, error message, and error details.You can find out more about this error model and how to work with it in the API Design Guide (https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the name should be a resource name ending with operations/{unique_id}.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as Delete, the response is google.protobuf.Empty. If the original method is standard Get/Create/Update, the response should be the resource. For other methods, the response should have the type XxxResponse, where Xxx is the original method name. For example, if the original method name is TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, requestId=None, x__xgafv=None)</code>
  <pre>Deletes a single backup.

Args:
  name: string, Required. The relative resource name of the backup to delete, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}. (required)
  requestId: string, Optional. A request ID. Specify a unique request ID to allow the server to ignore the request if it has completed. The server will ignore subsequent requests that provide a duplicate request ID for at least 60 minutes after the first request.For example, if an initial request times out, followed by another request with the same request ID, the server ignores the second request to prevent the creation of duplicate commitments.The request ID must be a valid UUID (https://en.wikipedia.org/wiki/Universally_unique_identifier#Format) A zero UUID (00000000-0000-0000-0000-000000000000) is not supported.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is false, it means the operation is still in progress. If true, the operation is completed, and either error or response is available.
  &quot;error&quot;: { # The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC (https://github.com/grpc). Each Status message contains three pieces of data: error code, error message, and error details.You can find out more about this error model and how to work with it in the API Design Guide (https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the name should be a resource name ending with operations/{unique_id}.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as Delete, the response is google.protobuf.Empty. If the original method is standard Get/Create/Update, the response should be the resource. For other methods, the response should have the type XxxResponse, where Xxx is the original method name. For example, if the original method name is TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets details of a single backup.

Args:
  name: string, Required. The relative resource name of the backup to retrieve, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The details of a backup resource.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the backup was started.
  &quot;description&quot;: &quot;A String&quot;, # The description of the backup.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the backup finished creating.
  &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the backup, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}
  &quot;serviceRevision&quot;: { # A managed metastore service that serves metadata queries. # Output only. The revision of the service at the time of backup.
    &quot;artifactGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI (starting with gs://) that specifies where artifacts related to the metastore service are stored.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was created.
    &quot;endpointUri&quot;: &quot;A String&quot;, # Output only. The URI of the endpoint used to access the metastore service.
    &quot;hiveMetastoreConfig&quot;: { # Specifies configuration information specific to running Hive metastore software as the metastore service. # Configuration information specific to running Hive metastore software as the metastore service.
      &quot;configOverrides&quot;: { # A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in hive-site.xml). The mappings override system defaults (some keys cannot be overridden).
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;kerberosConfig&quot;: { # Configuration information for a Kerberos principal. # Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable Kerberos, use the UpdateService method and specify this field&#x27;s path (hive_metastore_config.kerberos_config) in the request&#x27;s update_mask while omitting this field from the request&#x27;s service.
        &quot;keytab&quot;: { # A securely stored value. # A Kerberos keytab file that can be used to authenticate a service principal with a Kerberos Key Distribution Center (KDC).
          &quot;cloudSecret&quot;: &quot;A String&quot;, # The relative resource name of a Secret Manager secret version, in the following form:projects/{project_number}/secrets/{secret_id}/versions/{version_id}.
        },
        &quot;krb5ConfigGcsUri&quot;: &quot;A String&quot;, # A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form gs://{bucket_name}/path/to/krb5.conf, although the file does not need to be named krb5.conf explicitly.
        &quot;principal&quot;: &quot;A String&quot;, # A Kerberos principal that exists in the both the keytab the KDC to authenticate as. A typical principal is of the form primary/instance@REALM, but there is no exact format.
      },
      &quot;version&quot;: &quot;A String&quot;, # Immutable. The Hive metastore schema version.
    },
    &quot;labels&quot;: { # User-defined labels for the metastore service.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maintenanceWindow&quot;: { # Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service. # The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance purposes in UTC time.
      &quot;dayOfWeek&quot;: &quot;A String&quot;, # The day of week, when the window starts.
      &quot;hourOfDay&quot;: 42, # The hour of day (0-23) when the window starts.
    },
    &quot;metadataIntegration&quot;: { # Specifies how metastore metadata should be integrated with external services. # The setting that defines how metastore metadata should be integrated with external services and systems.
      &quot;dataCatalogConfig&quot;: { # Specifies how metastore metadata should be integrated with the Data Catalog service. # The integration config for the Data Catalog service.
        &quot;enabled&quot;: True or False, # Defines whether the metastore metadata should be synced to Data Catalog. The default value is to disable syncing metastore metadata to Data Catalog.
      },
    },
    &quot;metadataManagementActivity&quot;: { # The metadata management activities of the metastore service. # Output only. The metadata management activities of the metastore service.
      &quot;metadataExports&quot;: [ # Output only. The latest metadata exports of the metastore service.
        { # The details of a metadata export operation.
          &quot;databaseDumpType&quot;: &quot;A String&quot;, # Output only. The type of the database dump.
          &quot;destinationGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI of a folder that metadata are exported to, in the form of gs:////, where is automatically generated.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the export ended.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the export started.
          &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the export.
        },
      ],
      &quot;restores&quot;: [ # Output only. The latest restores of the metastore service.
        { # The details of a metadata restore operation.
          &quot;backup&quot;: &quot;A String&quot;, # Output only. The relative resource name of the metastore service backup to restore from, in the following form:projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}.
          &quot;details&quot;: &quot;A String&quot;, # Output only. The restore details containing the revision of the service to be restored to, in format of JSON.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the restore ended.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the restore started.
          &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the restore.
          &quot;type&quot;: &quot;A String&quot;, # Output only. The type of restore.
        },
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the metastore service, of the form:projects/{project_number}/locations/{location_id}/services/{service_id}.
    &quot;network&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:projects/{project_number}/global/networks/{network_id}.
    &quot;port&quot;: 42, # The TCP port at which the metastore service is reached. Default: 9083.
    &quot;releaseChannel&quot;: &quot;A String&quot;, # Immutable. The release channel of the service. If unspecified, defaults to STABLE.
    &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the metastore service.
    &quot;stateMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current state of the metastore service, if available.
    &quot;tier&quot;: &quot;A String&quot;, # The tier of the service.
    &quot;uid&quot;: &quot;A String&quot;, # Output only. The globally unique resource identifier of the metastore service.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was last updated.
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the backup.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists backups in a service.

Args:
  parent: string, Required. The relative resource name of the service whose backups to list, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups. (required)
  filter: string, Optional. The filter to apply to list results.
  orderBy: string, Optional. Specify the ordering of results as described in Sorting Order (https://cloud.google.com/apis/design/design_patterns#sorting_order). If not specified, the results will be sorted in the default order.
  pageSize: integer, Optional. The maximum number of backups to return. The response may contain less than the maximum number. If unspecified, no more than 500 backups are returned. The maximum value is 1000; values above 1000 are changed to 1000.
  pageToken: string, Optional. A page token, received from a previous DataprocMetastore.ListBackups call. Provide this token to retrieve the subsequent page.To retrieve the first page, supply an empty page token.When paginating, other parameters provided to DataprocMetastore.ListBackups must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for DataprocMetastore.ListBackups.
  &quot;backups&quot;: [ # The backups of the specified service.
    { # The details of a backup resource.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the backup was started.
      &quot;description&quot;: &quot;A String&quot;, # The description of the backup.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the backup finished creating.
      &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the backup, in the following form:projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}
      &quot;serviceRevision&quot;: { # A managed metastore service that serves metadata queries. # Output only. The revision of the service at the time of backup.
        &quot;artifactGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI (starting with gs://) that specifies where artifacts related to the metastore service are stored.
        &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was created.
        &quot;endpointUri&quot;: &quot;A String&quot;, # Output only. The URI of the endpoint used to access the metastore service.
        &quot;hiveMetastoreConfig&quot;: { # Specifies configuration information specific to running Hive metastore software as the metastore service. # Configuration information specific to running Hive metastore software as the metastore service.
          &quot;configOverrides&quot;: { # A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in hive-site.xml). The mappings override system defaults (some keys cannot be overridden).
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;kerberosConfig&quot;: { # Configuration information for a Kerberos principal. # Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable Kerberos, use the UpdateService method and specify this field&#x27;s path (hive_metastore_config.kerberos_config) in the request&#x27;s update_mask while omitting this field from the request&#x27;s service.
            &quot;keytab&quot;: { # A securely stored value. # A Kerberos keytab file that can be used to authenticate a service principal with a Kerberos Key Distribution Center (KDC).
              &quot;cloudSecret&quot;: &quot;A String&quot;, # The relative resource name of a Secret Manager secret version, in the following form:projects/{project_number}/secrets/{secret_id}/versions/{version_id}.
            },
            &quot;krb5ConfigGcsUri&quot;: &quot;A String&quot;, # A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form gs://{bucket_name}/path/to/krb5.conf, although the file does not need to be named krb5.conf explicitly.
            &quot;principal&quot;: &quot;A String&quot;, # A Kerberos principal that exists in the both the keytab the KDC to authenticate as. A typical principal is of the form primary/instance@REALM, but there is no exact format.
          },
          &quot;version&quot;: &quot;A String&quot;, # Immutable. The Hive metastore schema version.
        },
        &quot;labels&quot;: { # User-defined labels for the metastore service.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;maintenanceWindow&quot;: { # Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service. # The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance purposes in UTC time.
          &quot;dayOfWeek&quot;: &quot;A String&quot;, # The day of week, when the window starts.
          &quot;hourOfDay&quot;: 42, # The hour of day (0-23) when the window starts.
        },
        &quot;metadataIntegration&quot;: { # Specifies how metastore metadata should be integrated with external services. # The setting that defines how metastore metadata should be integrated with external services and systems.
          &quot;dataCatalogConfig&quot;: { # Specifies how metastore metadata should be integrated with the Data Catalog service. # The integration config for the Data Catalog service.
            &quot;enabled&quot;: True or False, # Defines whether the metastore metadata should be synced to Data Catalog. The default value is to disable syncing metastore metadata to Data Catalog.
          },
        },
        &quot;metadataManagementActivity&quot;: { # The metadata management activities of the metastore service. # Output only. The metadata management activities of the metastore service.
          &quot;metadataExports&quot;: [ # Output only. The latest metadata exports of the metastore service.
            { # The details of a metadata export operation.
              &quot;databaseDumpType&quot;: &quot;A String&quot;, # Output only. The type of the database dump.
              &quot;destinationGcsUri&quot;: &quot;A String&quot;, # Output only. A Cloud Storage URI of a folder that metadata are exported to, in the form of gs:////, where is automatically generated.
              &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the export ended.
              &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the export started.
              &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the export.
            },
          ],
          &quot;restores&quot;: [ # Output only. The latest restores of the metastore service.
            { # The details of a metadata restore operation.
              &quot;backup&quot;: &quot;A String&quot;, # Output only. The relative resource name of the metastore service backup to restore from, in the following form:projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}.
              &quot;details&quot;: &quot;A String&quot;, # Output only. The restore details containing the revision of the service to be restored to, in format of JSON.
              &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time when the restore ended.
              &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time when the restore started.
              &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the restore.
              &quot;type&quot;: &quot;A String&quot;, # Output only. The type of restore.
            },
          ],
        },
        &quot;name&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the metastore service, of the form:projects/{project_number}/locations/{location_id}/services/{service_id}.
        &quot;network&quot;: &quot;A String&quot;, # Immutable. The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:projects/{project_number}/global/networks/{network_id}.
        &quot;port&quot;: 42, # The TCP port at which the metastore service is reached. Default: 9083.
        &quot;releaseChannel&quot;: &quot;A String&quot;, # Immutable. The release channel of the service. If unspecified, defaults to STABLE.
        &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the metastore service.
        &quot;stateMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current state of the metastore service, if available.
        &quot;tier&quot;: &quot;A String&quot;, # The tier of the service.
        &quot;uid&quot;: &quot;A String&quot;, # Output only. The globally unique resource identifier of the metastore service.
        &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the metastore service was last updated.
      },
      &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the backup.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be sent as page_token to retrieve the next page. If this field is omitted, there are no subsequent pages.
  &quot;unreachable&quot;: [ # Locations that could not be reached.
    &quot;A String&quot;,
  ],
}</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>

</body></html>