| .. 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. | |
| Examples | |
| ======== | |
| .. note:: For a minimal quick start, see the :ref:`Getting Started <getting-started>` section. | |
| Key Concepts | |
| ------------ | |
| Defining Dags | |
| ~~~~~~~~~~~~~ | |
| Example: Defining a Dag | |
| Use the :func:`airflow.sdk.dag` decorator to convert a Python function into an Airflow Dag. All nested calls to :func:`airflow.sdk.task` within the function will become tasks in the Dag. For full parameters and usage, see the API reference for :func:`airflow.sdk.dag`. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_dag_decorator.py | |
| :language: python | |
| :start-after: [START dag_decorator_usage] | |
| :end-before: [END dag_decorator_usage] | |
| :caption: Using the :func:`@dag <airflow.sdk.dag>` decorator with custom tasks and operators. | |
| Decorators | |
| ~~~~~~~~~~ | |
| Example: Using Task SDK decorators | |
| The Task SDK provides decorators to simplify Dag definitions: | |
| - :func:`airflow.sdk.task_group` groups related tasks into logical TaskGroups. | |
| - :func:`airflow.sdk.setup` and :func:`airflow.sdk.teardown` define setup and teardown hooks for Dags or TaskGroups. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_task_group_decorator.py | |
| :language: python | |
| :start-after: [START howto_task_group_decorator] | |
| :end-before: [END howto_task_group_decorator] | |
| :caption: Group tasks using the :func:`@task_group <airflow.sdk.task_group>` decorator. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_setup_teardown_taskflow.py | |
| :language: python | |
| :start-after: [START example_setup_teardown_taskflow] | |
| :end-before: [END example_setup_teardown_taskflow] | |
| :caption: Define setup and teardown tasks with :func:`@setup <airflow.sdk.setup>` and :func:`@teardown <airflow.sdk.teardown>`. | |
| Tasks and Operators | |
| ~~~~~~~~~~~~~~~~~~~ | |
| Example: Defining tasks and using operators | |
| Use the :func:`airflow.sdk.task` decorator to wrap Python callables as tasks and leverage task mapping with the ``.expand()`` method. Tasks communicate via :class:`airflow.sdk.XComArg`. For traditional operators and sensors, import classes like :class:`airflow.sdk.BaseOperator` or :class:`airflow.sdk.Sensor`. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_dynamic_task_mapping.py | |
| :language: python | |
| :start-after: [START example_dynamic_task_mapping] | |
| :end-before: [END example_dynamic_task_mapping] | |
| :caption: Task mapping with ``expand()`` | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_xcomargs.py | |
| :language: python | |
| :start-after: [START example_xcomargs] | |
| :end-before: [END example_xcomargs] | |
| :caption: Using ``XComArg`` to chain tasks based on return values. | |
| Assets | |
| ~~~~~~ | |
| Example: Defining and aliasing assets | |
| Model data artifacts using the Task SDK's asset API. Decorate functions with :func:`airflow.sdk.asset` and create aliases with :class:`airflow.sdk.AssetAlias`. See the API reference under assets for full guidance. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_assets.py | |
| :language: python | |
| :start-after: [START asset_def] | |
| :end-before: [END asset_def] | |
| :caption: Defining an :func:`@asset <airflow.sdk.asset>` | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_asset_alias.py | |
| :language: python | |
| :start-after: [START example_asset_alias] | |
| :end-before: [END example_asset_alias] | |
| :caption: Defining asset aliases with :class:`AssetAlias <airflow.sdk.AssetAlias>`. | |
| TaskFlow API Tutorial | |
| --------------------- | |
| This section provides a concise, code-first view. For the full tutorial and context, | |
| see the :doc:`core TaskFlow tutorial <apache-airflow:tutorial/taskflow>`. | |
| Step 1: Define the Dag | |
| ---------------------- | |
| In this step, define your Dag by applying the :func:`airflow.sdk.dag` decorator to a Python function. This registers the Dag with its schedule and default arguments. For more details, see :func:`airflow.sdk.dag`. | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :start-after: [START instantiate_dag] | |
| :end-before: [END instantiate_dag] | |
| :caption: Defining the Dag with the :func:`@dag <airflow.sdk.dag>` decorator | |
| Step 2: Write your Tasks | |
| ------------------------ | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :dedent: 4 | |
| :start-after: [START extract] | |
| :end-before: [END extract] | |
| :caption: Extract task to load data | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :dedent: 4 | |
| :start-after: [START transform] | |
| :end-before: [END transform] | |
| :caption: Transform task to process data | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :dedent: 4 | |
| :start-after: [START load] | |
| :end-before: [END load] | |
| :caption: Load task to output results | |
| Step 3: Build the Flow | |
| ---------------------- | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :dedent: 4 | |
| :start-after: [START main_flow] | |
| :end-before: [END main_flow] | |
| :caption: Connecting tasks by invoking them like normal Python functions | |
| Step 4: Invoke the Dag | |
| ---------------------- | |
| .. exampleinclude:: ../../airflow-core/src/airflow/example_dags/tutorial_taskflow_api.py | |
| :language: python | |
| :start-after: [START dag_invocation] | |
| :end-before: [END dag_invocation] | |
| :caption: Registering the Dag by calling the decorated function |