:py:mod:`airflow.providers.google.marketing_platform.operators.analytics`
=========================================================================

.. py:module:: airflow.providers.google.marketing_platform.operators.analytics

.. autoapi-nested-parse::

   This module contains Google Analytics 360 operators.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsListAccountsOperator
   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsGetAdsLinkOperator
   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsRetrieveAdsLinksListOperator
   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsDataImportUploadOperator
   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsDeletePreviousDataUploadsOperator
   airflow.providers.google.marketing_platform.operators.analytics.GoogleAnalyticsModifyFileHeadersDataImportOperator




.. py:class:: GoogleAnalyticsListAccountsOperator(*, api_version = 'v3', gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

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

   Lists all accounts to which the user has access.

   .. seealso::
       Check official API docs:
       https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtReference/management/accounts/list
       and for python client
       http://googleapis.github.io/google-api-python-client/docs/dyn/analytics_v3.management.accounts.html#list

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

   :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 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] = ['api_version', 'gcp_conn_id', 'impersonation_chain']

      

   .. 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:: GoogleAnalyticsGetAdsLinkOperator(*, account_id, web_property_ad_words_link_id, web_property_id, api_version = 'v3', gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

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

   Returns a web property-Google Ads link to which the user has access.

   .. seealso::
       Check official API docs:
       https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtReference/management/webPropertyAdWordsLinks/get

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

   :param account_id: ID of the account which the given web property belongs to.
   :param web_property_ad_words_link_id: Web property-Google Ads link ID.
   :param web_property_id: Web property ID to retrieve the Google Ads link for.
   :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] = ['api_version', 'gcp_conn_id', 'account_id', 'web_property_ad_words_link_id', 'web_property_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:: GoogleAnalyticsRetrieveAdsLinksListOperator(*, account_id, web_property_id, api_version = 'v3', gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

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

   Lists webProperty-Google Ads links for a given web property

   .. seealso::
       Check official API docs:
       https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtReference/management/webPropertyAdWordsLinks/list#http-request

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

   :param account_id: ID of the account which the given web property belongs to.
   :param web_property_id: Web property UA-string to retrieve the Google Ads links for.
   :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] = ['api_version', 'gcp_conn_id', 'account_id', 'web_property_id', 'impersonation_chain']

      

   .. 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:: GoogleAnalyticsDataImportUploadOperator(*, storage_bucket, storage_name_object, account_id, web_property_id, custom_data_source_id, resumable_upload = False, gcp_conn_id = 'google_cloud_default', delegate_to = None, api_version = 'v3', impersonation_chain = None, **kwargs)

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

   Take a file from Cloud Storage and uploads it to GA via data import API.

   :param storage_bucket: The Google cloud storage bucket where the file is stored.
   :param storage_name_object: The name of the object in the desired Google cloud
         storage bucket. (templated) If the destination points to an existing
         folder, the file will be taken from the specified folder.
   :param account_id: The GA account Id (long) to which the data upload belongs.
   :param web_property_id: The web property UA-string associated with the upload.
   :param custom_data_source_id: The id to which the data import belongs
   :param resumable_upload: flag to upload the file in a resumable fashion, using a
       series of at least two requests.
   :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 api_version: The version of the api that will be requested for example 'v3'.
   :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] = ['storage_bucket', 'storage_name_object', 'impersonation_chain']

      

   .. 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:: GoogleAnalyticsDeletePreviousDataUploadsOperator(account_id, web_property_id, custom_data_source_id, gcp_conn_id = 'google_cloud_default', delegate_to = None, api_version = 'v3', impersonation_chain = None, **kwargs)

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

   Deletes previous GA uploads to leave the latest file to control the size of the Data Set Quota.

   :param account_id: The GA account Id (long) to which the data upload belongs.
   :param web_property_id: The web property UA-string associated with the upload.
   :param custom_data_source_id: The id to which the data import belongs.
   :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 api_version: The version of the api that will be requested for example 'v3'.
   :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] = ['impersonation_chain']

      

   .. 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:: GoogleAnalyticsModifyFileHeadersDataImportOperator(storage_bucket, storage_name_object, gcp_conn_id = 'google_cloud_default', delegate_to = None, custom_dimension_header_mapping = None, impersonation_chain = None, **kwargs)

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

   GA has a very particular naming convention for Data Import. Ability to
   prefix "ga:" to all column headers and also a dict to rename columns to
   match the custom dimension ID in GA i.e clientId : dimensionX.

   :param storage_bucket: The Google cloud storage bucket where the file is stored.
   :param storage_name_object: The name of the object in the desired Google cloud
         storage bucket. (templated) If the destination points to an existing
         folder, the file will be taken from the specified folder.
   :param gcp_conn_id: The connection ID to use when fetching connection info.
   :param custom_dimension_header_mapping: Dictionary to handle when uploading
         custom dimensions which have generic IDs ie. 'dimensionX' which are
         set by GA. Dictionary maps the current CSV header to GA ID which will
         be the new header for the CSV to upload to GA eg clientId : dimension1.
   :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 (templated).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['storage_bucket', 'storage_name_object', 'impersonation_chain']

      

   .. 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.



