

 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

Google DataFusion Operators
=======================================

Cloud Data Fusion is a fully managed, cloud-native data integration service that helps
users efficiently build and manage ETL/ELT data pipelines. With a graphical interface
and a broad open source library of preconfigured connectors and transformations, Cloud
Data Fusion shifts an organization's focus away from code and integration to insights
and action.

Prerequisite Tasks
^^^^^^^^^^^^^^^^^^

.. include::/operators/_partials/prerequisite_tasks.rst


.. _howto/operator:CloudDataFusionRestartInstanceOperator:

Restart DataFusion Instance
^^^^^^^^^^^^^^^^^^^^^^^^^^^

To restart Data Fusion instance use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionRestartInstanceOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_restart_instance_operator]
    :end-before: [END howto_cloud_data_fusion_restart_instance_operator]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionRestartInstanceOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

.. _howto/operator:CloudDataFusionDeleteInstanceOperator:

Delete DataFusion Instance
^^^^^^^^^^^^^^^^^^^^^^^^^^

To delete Data Fusion instance use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionDeleteInstanceOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_delete_instance_operator]
    :end-before: [END howto_cloud_data_fusion_delete_instance_operator]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionDeleteInstanceOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.


.. _howto/operator:CloudDataFusionCreateInstanceOperator:

Create DataFusion Instance
^^^^^^^^^^^^^^^^^^^^^^^^^^

To create Data Fusion instance use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionCreateInstanceOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_create_instance_operator]
    :end-before: [END howto_cloud_data_fusion_create_instance_operator]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionCreateInstanceOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.


.. _howto/operator:CloudDataFusionUpdateInstanceOperator:

Update DataFusion Instance
^^^^^^^^^^^^^^^^^^^^^^^^^^

To update Data Fusion instance use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionUpdateInstanceOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_update_instance_operator]
    :end-before: [END howto_cloud_data_fusion_update_instance_operator]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionUpdateInstanceOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

.. _howto/operator:CloudDataFusionGetInstanceOperator:

Get DataFusion Instance
^^^^^^^^^^^^^^^^^^^^^^^

To retrieve Data Fusion instance use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionGetInstanceOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_get_instance_operator]
    :end-before: [END howto_cloud_data_fusion_get_instance_operator]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionGetInstanceOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.


.. _howto/operator:CloudDataFusionCreatePipelineOperator:

Create a DataFusion pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To create Data Fusion pipeline use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionCreatePipelineOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_create_pipeline]
    :end-before: [END howto_cloud_data_fusion_create_pipeline]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionCreatePipelineOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

.. _howto/operator:CloudDataFusionStartPipelineOperator:

Start a DataFusion pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To start Data Fusion pipeline using synchronous mode:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionStartPipelineOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_start_pipeline]
    :end-before: [END howto_cloud_data_fusion_start_pipeline]

To start Data Fusion pipeline using asynchronous mode:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionStartPipelineOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_start_pipeline_async]
    :end-before: [END howto_cloud_data_fusion_start_pipeline_async]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionStartPipelineOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

.. _howto/operator:CloudDataFusionStopPipelineOperator:

Stop a DataFusion pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To stop Data Fusion pipeline use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionStopPipelineOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_stop_pipeline]
    :end-before: [END howto_cloud_data_fusion_stop_pipeline]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionStopPipelineOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

.. _howto/operator:CloudDataFusionDeletePipelineOperator:

Delete a DataFusion pipeline
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To delete Data Fusion pipeline use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionDeletePipelineOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_delete_pipeline]
    :end-before: [END howto_cloud_data_fusion_delete_pipeline]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionDeletePipelineOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.


.. _howto/operator:CloudDataFusionListPipelinesOperator:

List DataFusion pipelines
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To list Data Fusion pipelines use:
:class:`~airflow.providers.google.cloud.operators.datafusion.CloudDataFusionListPipelinesOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_list_pipelines]
    :end-before: [END howto_cloud_data_fusion_list_pipelines]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.datafusion.CloudDataFusionListPipelinesOperator`
parameters which allows you to dynamically determine values.
The result is saved to :ref:`XCom <concepts:xcom>`, which allows it to be used by other operators.

Sensors
^^^^^^^

When start pipeline is triggered asynchronously sensors may be used to run checks and verify that the pipeline in in correct state.

:class:`~airflow.providers.google.cloud.sensors.datafusion.CloudDataFusionPipelineStateSensor`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_datafusion.py
    :language: python
    :dedent: 4
    :start-after: [START howto_cloud_data_fusion_start_pipeline_sensor]
    :end-before: [END howto_cloud_data_fusion_start_pipeline_sensor]

:class:`~airflow.providers.google.cloud.sensors.datafusion.CloudDataFusionPipelineStateSensor`.
