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

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

.. autoapi-nested-parse::

   This module contains Google Dataplex hook.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.dataplex.DataplexHook




.. py:class:: DataplexHook(api_version = 'v1', 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 Dataplex.

   :param api_version: The version of the api that will be requested for example 'v3'.
   :param gcp_conn_id: The connection ID to use when fetching connection info.
   :param delegate_to: The account to impersonate, if any. For this to work, the service accountmaking the
       request must have  domain-wide delegation enabled.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).

   .. py:method:: get_dataplex_client()

      Returns DataplexServiceClient.


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

      Waits for long-lasting operation to complete.


   .. py:method:: create_task(project_id, region, lake_id, body, dataplex_task_id, validate_only = None, retry = DEFAULT, timeout = None, metadata = ())

      Creates a task resource within a lake.

      :param project_id: Required. The ID of the Google Cloud project that the task belongs to.
      :param region: Required. The ID of the Google Cloud region that the task belongs to.
      :param lake_id: Required. The ID of the Google Cloud lake that the task belongs to.
      :param body: Required. The Request body contains an instance of Task.
      :param dataplex_task_id: Required. Task identifier.
      :param validate_only: Optional. Only validate the request, but do not perform mutations.
          The default is false.
      :param retry: A retry object used  to retry requests. If `None` is specified, requests
          will not be retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete.
          Note that if `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.


   .. py:method:: delete_task(project_id, region, lake_id, dataplex_task_id, retry = DEFAULT, timeout = None, metadata = ())

      Delete the task resource.

      :param project_id: Required. The ID of the Google Cloud project that the task belongs to.
      :param region: Required. The ID of the Google Cloud region that the task belongs to.
      :param lake_id: Required. The ID of the Google Cloud lake that the task belongs to.
      :param dataplex_task_id: Required. The ID of the Google Cloud task to be deleted.
      :param retry: A retry object used  to retry requests. If `None` is specified, requests
          will not be retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete.
          Note that if `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.


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

      Lists tasks under the given lake.

      :param project_id: Required. The ID of the Google Cloud project that the task belongs to.
      :param region: Required. The ID of the Google Cloud region that the task belongs to.
      :param lake_id: Required. The ID of the Google Cloud lake that the task belongs to.
      :param page_size: Optional. Maximum number of tasks to return. The service may return fewer than this
          value. If unspecified, at most 10 tasks will be returned. The maximum value is 1000;
          values above 1000 will be coerced to 1000.
      :param page_token: Optional. Page token received from a previous ListZones call. Provide this to
          retrieve the subsequent page. When paginating, all other parameters provided to ListZones must
          match the call that provided the page token.
      :param filter: Optional. Filter request.
      :param order_by: Optional. Order by fields for the result.
      :param retry: A retry object used  to retry requests. If `None` is specified, requests
          will not be retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete.
          Note that if `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.


   .. py:method:: get_task(project_id, region, lake_id, dataplex_task_id, retry = DEFAULT, timeout = None, metadata = ())

      Get task resource.

      :param project_id: Required. The ID of the Google Cloud project that the task belongs to.
      :param region: Required. The ID of the Google Cloud region that the task belongs to.
      :param lake_id: Required. The ID of the Google Cloud lake that the task belongs to.
      :param dataplex_task_id: Required. The ID of the Google Cloud task to be retrieved.
      :param retry: A retry object used  to retry requests. If `None` is specified, requests
          will not be retried.
      :param timeout: The amount of time, in seconds, to wait for the request to complete.
          Note that if `retry` is specified, the timeout applies to each individual attempt.
      :param metadata: Additional metadata that is provided to the method.



