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

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


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.datacatalog.CloudDataCatalogHook




.. py:class:: CloudDataCatalogHook(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 Data Catalog Service.

   :param gcp_conn_id: The connection ID to use when fetching connection info.
   :param delegate_to: The account to impersonate using domain-wide delegation of authority,
       if any. For this to work, the service account making 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.

   .. py:method:: get_conn(self)

      Retrieves client library object that allow access to Cloud Data Catalog service.


   .. py:method:: create_entry(self, location, entry_group, entry_id, entry, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Creates an entry.

      Currently only entries of 'FILESET' type can be created.

      :param location: Required. The location of the entry to create.
      :param entry_group: Required. Entry group ID under which the entry is created.
      :param entry_id: Required. The id of the entry to create.
      :param entry: Required. The entry to create.
          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.Entry`
      :param project_id: The ID of the Google Cloud project that owns the entry.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If set to ``None`` or missing, requests will be
          retried using a default configuration.
      :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:: create_entry_group(self, location, entry_group_id, entry_group, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Creates an EntryGroup.

      :param location: Required. The location of the entry group to create.
      :param entry_group_id: Required. The id of the entry group to create. The id must begin with a letter
          or underscore, contain only English letters, numbers and underscores, and be at most 64
          characters.
      :param entry_group: The entry group to create. Defaults to an empty entry group.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.EntryGroup`
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: create_tag(self, location, entry_group, entry, tag, project_id = PROVIDE_PROJECT_ID, template_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Creates a tag on an entry.

      :param location: Required. The location of the tag to create.
      :param entry_group: Required. Entry group ID under which the tag is created.
      :param entry: Required. Entry group ID under which the tag is created.
      :param tag: Required. The tag to create.
          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.Tag`
      :param template_id: Required. Template ID used to create tag
      :param project_id: The ID of the Google Cloud project that owns the tag.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: create_tag_template(self, location, tag_template_id, tag_template, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Creates a tag template.

      :param location: Required. The location of the tag template to create.
      :param tag_template_id: Required. The id of the tag template to create.
      :param tag_template: Required. The tag template to create.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.TagTemplate`
      :param project_id: The ID of the Google Cloud project that owns the tag template.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: create_tag_template_field(self, location, tag_template, tag_template_field_id, tag_template_field, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Creates a field in a tag template.

      :param location: Required. The location of the tag template field to create.
      :param tag_template: Required. The id of the tag template to create.
      :param tag_template_field_id: Required. The ID of the tag template field to create. Field ids can
          contain letters (both uppercase and lowercase), numbers (0-9), underscores (\_) and dashes (-).
          Field IDs must be at least 1 character long and at most 128 characters long. Field IDs must also
          be unique within their template.
      :param tag_template_field: Required. The tag template field to create.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.TagTemplateField`
      :param project_id: The ID of the Google Cloud project that owns the tag template field.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_entry(self, location, entry_group, entry, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Deletes an existing entry.

      :param location: Required. The location of the entry to delete.
      :param entry_group: Required. Entry group ID for entries that is deleted.
      :param entry: Entry ID that is deleted.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_entry_group(self, location, entry_group, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Deletes an EntryGroup.

      Only entry groups that do not contain entries can be deleted.

      :param location: Required. The location of the entry group to delete.
      :param entry_group: Entry group ID that is deleted.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tag(self, location, entry_group, entry, tag, project_id = PROVIDE_PROJECT_ID, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a tag.

      :param location: Required. The location of the tag to delete.
      :param entry_group: Entry group ID for tag that is deleted.
      :param entry: Entry  ID for tag that is deleted.
      :param tag: Identifier for TAG that is deleted.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tag_template(self, location, tag_template, force, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a tag template and all tags using the template.

      :param location: Required. The location of the tag template to delete.
      :param tag_template: ID for tag template that is deleted.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param force: Required. Currently, this field must always be set to ``true``. This confirms the
          deletion of any possible tags using this template. ``force = false`` will be supported in the
          future.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tag_template_field(self, location, tag_template, field, force, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Deletes a field in a tag template and all uses of that field.

      :param location: Required. The location of the tag template to delete.
      :param tag_template: Tag Template ID for tag template field that is deleted.
      :param field: Name of field that is deleted.
      :param force: Required. This confirms the deletion of this field from any tags using this field.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_entry(self, location, entry_group, entry, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Gets an entry.

      :param location: Required. The location of the entry to get.
      :param entry_group: Required. The entry group of the entry to get.
      :param entry: The ID of the entry to get.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_entry_group(self, location, entry_group, project_id, read_mask = None, retry = DEFAULT, timeout = None, metadata = ())

      Gets an entry group.

      :param location: Required. The location of the entry group to get.
      :param entry_group: The ID of the entry group to get.
      :param read_mask: The fields to return. If not set or empty, all fields are returned.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.protobuf.field_mask_pb2.FieldMask`
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tag_template(self, location, tag_template, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Gets a tag template.

      :param location: Required. The location of the tag template to get.
      :param tag_template: Required. The ID of the tag template to get.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tags(self, location, entry_group, entry, project_id, page_size = 100, retry = DEFAULT, timeout = None, metadata = ())

      Lists the tags on an Entry.

      :param location: Required. The location of the tags to get.
      :param entry_group: Required. The entry group of the tags to get.
      :param entry_group: Required. The entry of the tags to get.
      :param page_size: The maximum number of resources contained in the underlying API response. If page
          streaming is performed per- resource, this parameter does not affect the return value. If page
          streaming is performed per-page, this determines the maximum number of resources in a page.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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_tag_for_template_name(self, location, entry_group, entry, template_name, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Gets for a tag with a specific template for a specific entry.

      :param location: Required. The location which contains the entry to search for.
      :param entry_group: The entry group ID which contains the entry to search for.
      :param entry:  The name of the entry to search for.
      :param template_name: The name of the template that will be the search criterion.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: lookup_entry(self, linked_resource = None, sql_resource = None, retry = DEFAULT, timeout = None, metadata = ())

      Get an entry by target resource name.

      This method allows clients to use the resource name from the source Google Cloud service
      to get the Data Catalog Entry.

      :param linked_resource: The full name of the Google Cloud resource the Data Catalog entry
          represents. See: https://cloud.google.com/apis/design/resource\_names#full\_resource\_name. Full
          names are case-sensitive.

      :param sql_resource: The SQL name of the entry. SQL names are case-sensitive.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: rename_tag_template_field(self, location, tag_template, field, new_tag_template_field_id, project_id, retry = DEFAULT, timeout = None, metadata = ())

      Renames a field in a tag template.

      :param location: Required. The location of the tag template field to rename.
      :param tag_template: The tag template ID for field that is renamed.
      :param field: Required. The old ID of this tag template field. For example,
          ``my_old_field``.
      :param new_tag_template_field_id: Required. The new ID of this tag template field. For example,
          ``my_new_field``.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: search_catalog(self, scope, query, page_size = 100, order_by = None, retry = DEFAULT, timeout = None, metadata = ())

      Searches Data Catalog for multiple resources like entries, tags that match a query.

      This does not return the complete resource, only the resource identifier and high level fields.
      Clients can subsequently call ``Get`` methods.

      Note that searches do not have full recall. There may be results that match your query but are not
      returned, even in subsequent pages of results. These missing results may vary across repeated calls to
      search. Do not rely on this method if you need to guarantee full recall.

      :param scope: Required. The scope of this search request.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.Scope`
      :param query: Required. The query string in search query syntax. The query must be non-empty.

          Query strings can be simple as "x" or more qualified as:

          -  name:x
          -  column:x
          -  description:y

          Note: Query tokens need to have a minimum of 3 characters for substring matching to work
          correctly. See `Data Catalog Search Syntax <https://cloud.google.com/data-catalog/docs/how-
          to/search-reference>`__ for more information.
      :param page_size: The maximum number of resources contained in the underlying API response. If page
          streaming is performed per-resource, this parameter does not affect the return value. If page
          streaming is performed per-page, this determines the maximum number of resources in a page.
      :param order_by: Specifies the ordering of results, currently supported case-sensitive choices are:

          -  ``relevance``, only supports descending
          -  ``last_access_timestamp [asc|desc]``, defaults to descending if not specified
          -  ``last_modified_timestamp [asc|desc]``, defaults to descending if not specified

          If not specified, defaults to ``relevance`` descending.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: update_entry(self, entry, update_mask, project_id, location = None, entry_group = None, entry_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates an existing entry.

      :param entry: Required. The updated entry. The "name" field must be set.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.Entry`
      :param update_mask: The fields to update on the entry. If absent or empty, all modifiable fields are
          updated.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.protobuf.field_mask_pb2.FieldMask`
      :param location: Required. The location of the entry to update.
      :param entry_group: The entry group ID for the entry that is being updated.
      :param entry_id: The entry ID that is being updated.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: update_tag(self, tag, update_mask, project_id, location = None, entry_group = None, entry = None, tag_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates an existing tag.

      :param tag: Required. The updated tag. The "name" field must be set.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.Tag`
      :param update_mask: The fields to update on the Tag. If absent or empty, all modifiable fields are
          updated. Currently the only modifiable field is the field ``fields``.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.FieldMask`
      :param location: Required. The location of the tag to rename.
      :param entry_group: The entry group ID for the tag that is being updated.
      :param entry: The entry ID for the tag that is being updated.
      :param tag_id: The tag ID that is being updated.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: update_tag_template(self, tag_template, update_mask, project_id, location = None, tag_template_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates a tag template.

      This method cannot be used to update the fields of a template. The tag
      template fields are represented as separate resources and should be updated using their own
      create/update/delete methods.

      :param tag_template: Required. The template to update. The "name" field must be set.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.TagTemplate`
      :param update_mask: The field mask specifies the parts of the template to overwrite.

          If absent or empty, all of the allowed fields above will be updated.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.protobuf.field_mask_pb2.FieldMask`
      :param location: Required. The location of the tag template to rename.
      :param tag_template_id: Optional. The tag template ID for the entry that is being updated.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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:: update_tag_template_field(self, tag_template_field, update_mask, project_id, tag_template_field_name = None, location = None, tag_template = None, tag_template_field_id = None, retry = DEFAULT, timeout = None, metadata = ())

      Updates a field in a tag template. This method cannot be used to update the field type.

      :param tag_template_field: Required. The template to update.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.cloud.datacatalog_v1beta1.types.TagTemplateField`
      :param update_mask: The field mask specifies the parts of the template to be updated. Allowed fields:

          -  ``display_name``
          -  ``type.enum_type``

          If ``update_mask`` is not set or empty, all of the allowed fields above will be updated.

          When updating an enum type, the provided values will be merged with the existing values.
          Therefore, enum values can only be added, existing enum values cannot be deleted nor renamed.

          If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.protobuf.field_mask_pb2.FieldMask`
      :param tag_template_field_name: Optional. The name of the tag template field to rename.
      :param location: Optional. The location of the tag to rename.
      :param tag_template: Optional. The tag template ID for tag template field to rename.
      :param tag_template_field_id: Optional. The ID of tag template field to rename.
      :param project_id: The ID of the Google Cloud project that owns the entry group.
          If set to ``None`` or missing, the default project_id from the Google Cloud connection is used.
      :param retry: A retry object used to retry requests. If ``None`` is specified, requests will be
          retried using a default configuration.
      :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.



