簡體   English   中英

在氣流 Dag 中使用 dag_run 變量

[英]Using dag_run variables in airflow Dag

我正在嘗試使用氣流變量來確定是否執行任務。 我試過這個,但它不起作用:

if '{{ params.year }}' == '{{ params.message }}':
     run_this = DummyOperator (
                task_id = 'dummy_dag'
               )

我希望能得到一些幫助讓它發揮作用。 還有在氣流中做這樣的事情的更好方法嗎?

我認為解決這個問題的一個好方法是使用BranchPythonOperator根據提供的 DAG 參數動態分支。 考慮這個例子:

使用params向 DAG 提供參數(也可以從 UI 完成),在本例中: {"enabled": True}

from airflow.decorators import dag, task
from airflow.utils.dates import days_ago
from airflow.operators.python import get_current_context, BranchPythonOperator

@dag(
    default_args=default_args,
    schedule_interval=None,
    start_date=days_ago(1),
    catchup=False,
    tags=["example"],
    params={"enabled": True},
)
def branch_from_dag_params():
    def _print_enabled():
        context = get_current_context()
        enabled = context["params"].get("enabled", False)
        print(f"Task id: {context['ti'].task_id}")
        print(f"Enabled is: {enabled}")

    @task
    def task_a():
        _print_enabled()

    @task
    def task_b():
        _print_enabled()

定義一個可調用的BranchPythonOperator ,您將在其中執行條件並返回要執行的下一個任務。 您可以從**kwargs訪問執行上下文變量。 另請記住,此運算符應返回單個task_idtask_id 列表以跟隨下游。 這些由此產生的任務應該總是直接在它的下游。

    def _get_task_run(ti, **kwargs):
        custom_param = kwargs["params"].get("enabled", False)

        if custom_param:
            return "task_a"
        else:
            return "task_b"

    branch_task = BranchPythonOperator(
        task_id="branch_task",
        python_callable=_get_task_run,
    )
    task_a_exec = task_a()
    task_b_exec = task_b()
    branch_task >> [task_a_exec, task_b_exec]

結果是task_a被執行而task_b跳過

從 dag 參數分支

AIRFLOW_CTX_DAG_OWNER=airflow
AIRFLOW_CTX_DAG_ID=branch_from_dag_params
AIRFLOW_CTX_TASK_ID=task_a
Task id: task_a
Enabled is: True

如果這對你有用,請告訴我。

文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM