:py:mod:`airflow.providers.google.cloud.transfers.bigquery_to_mssql`
====================================================================

.. py:module:: airflow.providers.google.cloud.transfers.bigquery_to_mssql

.. autoapi-nested-parse::

   This module contains Google BigQuery to MSSQL operator.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.transfers.bigquery_to_mssql.BigQueryToMsSqlOperator




.. py:class:: BigQueryToMsSqlOperator(*, source_project_dataset_table, mssql_table, selected_fields = None, gcp_conn_id = 'google_cloud_default', mssql_conn_id = 'mssql_default', database = None, delegate_to = None, replace = False, batch_size = 1000, location = None, impersonation_chain = None, **kwargs)

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

   Fetches the data from a BigQuery table (alternatively fetch data for selected columns)
   and insert that data into a MSSQL table.


   .. note::
       If you pass fields to ``selected_fields`` which are in different order than the
       order of columns already in
       BQ table, the data will still be in the order of BQ table.
       For example if the BQ table has 3 columns as
       ``[A,B,C]`` and you pass 'B,A' in the ``selected_fields``
       the data would still be of the form ``'A,B'`` and passed through this form
       to MSSQL

   **Example**: ::

      transfer_data = BigQueryToMsSqlOperator(
           task_id='task_id',
           source_project_dataset_table='my-project.mydataset.mytable',
           mssql_table='dest_table_name',
           replace=True,
       )

   :param source_project_dataset_table: A dotted ``<project>.<dataset>.<table>``:
       the big query table of origin
   :param selected_fields: List of fields to return (comma-separated). If
       unspecified, all fields are returned.
   :param gcp_conn_id: reference to a specific Google Cloud hook.
   :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 mssql_conn_id: reference to a specific mssql hook
   :param database: name of database which overwrite defined one in connection
   :param replace: Whether to replace instead of insert
   :param batch_size: The number of rows to take in each batch
   :param location: The location used for the operation.
   :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] = ['source_project_dataset_table', 'mssql_table', 'impersonation_chain']

      

   .. py:attribute:: operator_extra_links
      

      

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



