blob: be1ce8109e26d1e15d213f80a644c9c66de254ad [file] [log] [blame]
.. 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.
.. _howto/operator:Cross-DAG Dependencies:
Cross-DAG Dependencies
======================
When two DAGs have dependency relationships, it is worth considering combining them into a single
DAG, which is usually simpler to understand. Airflow also offers better visual representation of
dependencies for tasks on the same DAG. However, it is sometimes not practical to put all related
tasks on the same DAG. For example:
- Two DAGs may have different schedules. E.g. a weekly DAG may have tasks that depend on other tasks
on a daily DAG.
- Different teams are responsible for different DAGs, but these DAGs have some cross-DAG
dependencies.
- A task may depend on another task on the same DAG, but for a different ``execution_date``.
``ExternalTaskSensor`` can be used to establish such dependencies across different DAGs. When it is
used together with ``ExternalTaskMarker``, clearing dependent tasks can also happen across different
DAGs.
ExternalTaskSensor
^^^^^^^^^^^^^^^^^^
Use the :class:`~airflow.sensors.external_task_sensor.ExternalTaskSensor` to make tasks on a DAG
wait for another task on a different DAG for a specific ``execution_date``.
.. exampleinclude:: ../../../airflow/example_dags/example_external_task_marker_dag.py
:language: python
:start-after: [START howto_operator_external_task_sensor]
:end-before: [END howto_operator_external_task_sensor]
ExternalTaskMarker
^^^^^^^^^^^^^^^^^^
If it is desirable that whenever ``parent_task`` on ``parent_dag`` is cleared, ``child_task1``
on ``child_dag`` for a specific ``execution_date`` should also be cleared, ``ExternalTaskMarker``
should be used. Note that ``child_task1`` will only be cleared if "Recursive" is selected when the
user clears ``parent_task``.
.. exampleinclude:: ../../../airflow/example_dags/example_external_task_marker_dag.py
:language: python
:start-after: [START howto_operator_external_task_marker]
:end-before: [END howto_operator_external_task_marker]