:py:mod:`airflow.providers.google.cloud.hooks.dataproc_metastore`
=================================================================

.. py:module:: airflow.providers.google.cloud.hooks.dataproc_metastore

.. autoapi-nested-parse::

   This module contains a Google Cloud Dataproc Metastore hook.



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.dataproc_metastore.DataprocMetastoreHook




.. py:class:: DataprocMetastoreHook(gcp_conn_id = 'google_cloud_default', delegate_to = None, impersonation_chain = None)

   Bases: :py:obj:`airflow.providers.google.common.hooks.base_google.GoogleBaseHook`

   Hook for Google Cloud Dataproc Metastore APIs.

   .. py:method:: get_dataproc_metastore_client()

      Returns DataprocMetastoreClient.


   .. py:method:: wait_for_operation(timeout, operation)

      Waits for long-lasting operation to complete.


   .. py:method:: create_backup(project_id, region, service_id, backup, backup_id, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Creates a new backup in a given project and location.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param backup:  Required. The backup to create. The ``name`` field is ignored. The ID of the created
          backup must be provided in the request's ``backup_id`` field.

          This corresponds to the ``backup`` field on the ``request`` instance; if ``request`` is provided,
          this should not be set.
      :param backup_id:  Required. The ID of the backup, which is used as the final component of the
          backup'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 alphanumeric ASCII characters or hyphens.

          This corresponds to the ``backup_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: create_metadata_import(project_id, region, service_id, metadata_import, metadata_import_id, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Creates a new MetadataImport in a given project and location.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param metadata_import:  Required. The metadata import to create. The ``name`` field is ignored. The
          ID of the created metadata import must be provided in the request's ``metadata_import_id`` field.

          This corresponds to the ``metadata_import`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param metadata_import_id:  Required. The ID of the metadata import, which is used as the final
          component of the metadata import'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 alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``metadata_import_id`` field on the ``request`` instance; if ``request``
          is provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: create_service(region, project_id, service, service_id, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Creates a metastore service in a project and location.

      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param service:  Required. The Metastore service to create. The ``name`` field is ignored. The ID of
          the created metastore service must be provided in the request's ``service_id`` field.

          This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided,
          this should not be set.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: delete_backup(project_id, region, service_id, backup_id, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a single backup.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param backup_id:  Required. The ID of the backup, which is used as the final component of the
          backup'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 alphanumeric ASCII characters or hyphens.

          This corresponds to the ``backup_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: delete_service(project_id, region, service_id, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a single service.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: export_metadata(destination_gcs_folder, project_id, region, service_id, request_id = None, database_dump_type = None, retry = DEFAULT, timeout = None, metadata = ())

      Exports metadata from a service.

      :param destination_gcs_folder: A Cloud Storage URI of a folder, in the format
          ``gs://<bucket_name>/<path_inside_bucket>``. A sub-folder
          ``<export_folder>`` containing exported files will be
          created below it.
      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param database_dump_type: Optional. The type of the database dump. If unspecified,
          defaults to ``MYSQL``.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: get_service(project_id, region, service_id, retry = DEFAULT, timeout = None, metadata = ())

      Gets the details of a single service.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: get_backup(project_id, region, service_id, backup_id, retry = DEFAULT, timeout = None, metadata = ())

      Get backup from a service.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param backup_id:  Required. The ID of the metastore service backup to restore from
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: list_backups(project_id, region, service_id, page_size = None, page_token = None, filter = None, order_by = None, retry = DEFAULT, timeout = None, metadata = ())

      Lists backups in a service.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param page_size: 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.
      :param page_token: Optional. A page token, received from a previous
          [DataprocMetastore.ListBackups][google.cloud.metastore.v1.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][google.cloud.metastore.v1.DataprocMetastore.ListBackups]
          must match the call that provided the page token.
      :param filter: Optional. The filter to apply to list
          results.
      :param order_by: 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.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: restore_service(project_id, region, service_id, backup_project_id, backup_region, backup_service_id, backup_id, restore_type = None, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Restores a service from a backup.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param backup_project_id: Required. The ID of the Google Cloud project that the metastore service
          backup to restore from.
      :param backup_region: Required. The ID of the Google Cloud region that the metastore
          service backup to restore from.
      :param backup_service_id:  Required. The ID of the metastore service backup to restore from,
          which is used as the final component of the metastore service's name. This value must be
          between 2 and 63 characters long inclusive, begin with a letter, end with a letter or number,
          and consist of alphanumeric ASCII characters or hyphens.
      :param backup_id:  Required. The ID of the metastore service backup to restore from
      :param restore_type: Optional. The type of restore. If unspecified, defaults to
          ``METADATA_ONLY``
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: update_service(project_id, region, service_id, service, update_mask, request_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates the parameters of a single service.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param service_id:  Required. The ID of the metastore service, which is used as the final component of
          the metastore service's name. This value must be between 2 and 63 characters long inclusive, begin
          with a letter, end with a letter or number, and consist of alphanumeric ASCII characters or
          hyphens.

          This corresponds to the ``service_id`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param service:  Required. The metastore service to update. The server only merges fields in the
          service if they are specified in ``update_mask``.

          The metastore service's ``name`` field is used to identify the metastore service to be updated.

          This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided,
          this should not be set.
      :param update_mask:  Required. A field mask used to specify the fields to be overwritten in the
          metastore service resource by the update. Fields specified in the ``update_mask`` are relative to
          the resource (not to the full request). A field is overwritten if it is in the mask.

          This corresponds to the ``update_mask`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param request_id: Optional. A unique id used to identify the request.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.



