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

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


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogCreateEntryOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogCreateEntryGroupOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogCreateTagOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogCreateTagTemplateOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogCreateTagTemplateFieldOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogDeleteEntryOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogDeleteEntryGroupOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogDeleteTagOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogDeleteTagTemplateOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogDeleteTagTemplateFieldOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogGetEntryOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogGetEntryGroupOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogGetTagTemplateOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogListTagsOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogLookupEntryOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogRenameTagTemplateFieldOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogSearchCatalogOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogUpdateEntryOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogUpdateTagOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogUpdateTagTemplateOperator
   airflow.providers.google.cloud.operators.datacatalog.CloudDataCatalogUpdateTagTemplateFieldOperator




.. py:class:: CloudDataCatalogCreateEntryOperator(*, location, entry_group, entry_id, entry, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Creates an entry.

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

   The newly created entry ID are saved under the ``entry_id`` key in XCOM.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogCreateEntryOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry_id', 'entry', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogCreateEntryGroupOperator(*, location, entry_group_id, entry_group, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Creates an EntryGroup.

   The newly created entry group ID are saved under the ``entry_group_id`` key in XCOM.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogCreateEntryGroupOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group_id', 'entry_group', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogCreateTagOperator(*, location, entry_group, entry, tag, template_id = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Creates a tag on an entry.

   The newly created tag ID are saved under the ``tag_id`` key in XCOM.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogCreateTagOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry', 'tag', 'template_id', 'project_id', 'retry', 'timeout',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogCreateTagTemplateOperator(*, location, tag_template_id, tag_template, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Creates a tag template.

   The newly created tag template are saved under the ``tag_template_id`` key in XCOM.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogCreateTagTemplateOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template_id', 'tag_template', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogCreateTagTemplateFieldOperator(*, location, tag_template, tag_template_field_id, tag_template_field, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Creates a field in a tag template.

   The newly created tag template field are saved under the ``tag_template_field_id`` key in XCOM.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogCreateTagTemplateFieldOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template', 'tag_template_field_id', 'tag_template_field', 'project_id',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogDeleteEntryOperator(*, location, entry_group, entry, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Deletes an existing entry.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogDeleteEntryOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogDeleteEntryGroupOperator(*, location, entry_group, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Deletes an EntryGroup.

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

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogDeleteEntryGroupOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'project_id', 'retry', 'timeout', 'metadata', 'gcp_conn_id',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogDeleteTagOperator(*, location, entry_group, entry, tag, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Deletes a tag.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogDeleteTagOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry', 'tag', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogDeleteTagTemplateOperator(*, location, tag_template, force, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Deletes a tag template and all tags using the template.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogDeleteTagTemplateOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template', 'force', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogDeleteTagTemplateFieldOperator(*, location, tag_template, field, force, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

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

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogDeleteTagTemplateFieldOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template', 'field', 'force', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogGetEntryOperator(*, location, entry_group, entry, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Gets an entry.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogGetEntryOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogGetEntryGroupOperator(*, location, entry_group, read_mask, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Gets an entry group.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogGetEntryGroupOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'read_mask', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogGetTagTemplateOperator(*, location, tag_template, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Gets a tag template.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogGetTagTemplateOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template', 'project_id', 'retry', 'timeout', 'metadata', 'gcp_conn_id',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogListTagsOperator(*, location, entry_group, entry, page_size = 100, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Lists the tags on an Entry.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogListTagsOperator`

   :param location: Required. The location of the tags to get.
   :param entry_group: Required. The entry group of the tags to get.
   :param entry: 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.
       (Default: 100)
   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'entry_group', 'entry', 'page_size', 'project_id', 'retry', 'timeout', 'metadata',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogLookupEntryOperator(*, linked_resource = None, sql_resource = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   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.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogLookupEntryOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['linked_resource', 'sql_resource', 'project_id', 'retry', 'timeout', 'metadata', 'gcp_conn_id',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogRenameTagTemplateFieldOperator(*, location, tag_template, field, new_tag_template_field_id, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Renames a field in a tag template.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogRenameTagTemplateFieldOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['location', 'tag_template', 'field', 'new_tag_template_field_id', 'project_id', 'retry',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogSearchCatalogOperator(*, scope, query, page_size = 100, order_by = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   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.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogSearchCatalogOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['scope', 'query', 'page_size', 'order_by', 'retry', 'timeout', 'metadata', 'gcp_conn_id',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogUpdateEntryOperator(*, entry, update_mask, location = None, entry_group = None, entry_id = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Updates an existing entry.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogUpdateEntryOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['entry', 'update_mask', 'location', 'entry_group', 'entry_id', 'project_id', 'retry',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogUpdateTagOperator(*, tag, update_mask, location = None, entry_group = None, entry = None, tag_id = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Updates an existing tag.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogUpdateTagOperator`

   :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.protobuf.field_mask_pb2.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 gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['tag', 'update_mask', 'location', 'entry_group', 'entry', 'tag_id', 'project_id', 'retry',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogUpdateTagTemplateOperator(*, tag_template, update_mask, location = None, tag_template_id = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   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.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogUpdateTagTemplateOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['tag_template', 'update_mask', 'location', 'tag_template_id', 'project_id', 'retry', 'timeout',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudDataCatalogUpdateTagTemplateFieldOperator(*, tag_template_field, update_mask, tag_template_field_name = None, location = None, tag_template = None, tag_template_field_id = None, project_id = None, retry = DEFAULT, timeout = None, metadata = (), gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

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

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudDataCatalogUpdateTagTemplateFieldOperator`

   :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.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to 'google_cloud_default'.
   :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:attribute:: template_fields
      :annotation: :Sequence[str] = ['tag_template_field', 'update_mask', 'tag_template_field_name', 'location', 'tag_template',...

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



