通过UI将参数传递给Airflow的作业

Ale*_*hov 10 orchestration airflow apache-airflow

是否可以通过UI将参数传递给Airflow的作业?

DFA中的AFAIK,'params'参数在python代码中定义,因此无法在运行时更改.

sha*_*359 13

改变 DAG 行为的两种方法:

  1. 使用Bryan在他的回答中提到的气流变量。
  2. 使用 Airflow JSON Conf 将 JSON 数据传递到单个 DAG 运行。JSON 可以从

UI - 从树视图手动触发 在此输入图像描述 UI - 通过浏览 > DAG 运行 > 创建新记录创建新的 DAG 运行 在此输入图像描述

或来自

命令行界面

airflow trigger_dag 'MY_DAG' -r 'test-run-1' --conf '{"exec_date":"2021-09-14"}'
Run Code Online (Sandbox Code Playgroud)

在 DAG 中,可以使用 jinja 模板或在运算符可调用函数上下文参数中访问此 JSON。

def do_some_task(**context):
    print(context['dag_run'].conf['exec_date'])


task1 = PythonOperator(
    task_id='task1_id',
    provide_context=True,
    python_callable=do_some_task,
    dag=dag,
)

#access in templates
task2 = BashOperator(
    task_id="task2_id",
    bash_command="{{ dag_run.conf['exec_date'] }}",
    dag=dag,
)
Run Code Online (Sandbox Code Playgroud)

请注意,JSON conf 在计划运行期间不会出现。JSON conf 的最佳用例是覆盖默认的 DAG 行为。因此,在 DAG 代码中设置有意义的默认值,以便在计划运行期间不使用 JSON conf。


Bry*_*yan 6

根据您尝试的操作,您可能可以利用Airflow Variables.可以在"管理"选项卡下的UI中定义或编辑这些内容.然后,您的DAG代码可以读取变量的值并将值传递给它创建的DAG.

但请注意,尽管变量允许您从代码中解除值,但DAG的所有运行都将读取变量的相同值.如果你想让运行传递不同的值,你最好的选择可能是使用气流模板宏并用run_id宏或类似的方法区分宏