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

Passing parameters to Airflow's jobs through UI

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

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

根据您要执行的操作,您或许可以利用 Airflow Variables。这些可以在管理选项卡下的 UI 中定义或编辑。然后您的 DAG 代码可以读取变量的值并将该值传递给它创建的 DAG。

但是请注意,虽然变量可以让您将值与代码分离,但 DAG 的所有运行都将读取相同的变量值。如果你想让运行传递不同的值,你最好的选择可能是使用 airflow templating macros 并用 run_id 宏或类似的

区分宏

改变 DAG 行为的两种方法:

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

UI - 从树视图手动触发 UI - 从浏览创建新 DAG 运行 > DAG 运行s > 创建新记录

或来自

CLI

airflow trigger_dag 'MY_DAG' -r 'test-run-1' --conf '{"exec_date":"2021-09-14"}'

在 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,
)

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