代码之家  ›  专栏  ›  技术社区  ›  Alexander Ershov

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

  •  21
  • Alexander Ershov  · 技术社区  · 7 年前

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

    AFAIK,DAG中的“params”参数是在python代码中定义的,因此在运行时不能更改。

    2 回复  |  直到 7 年前
        1
  •  11
  •   Bryan    7 年前

    取决于你想做什么,你可能能够利用 Airflow Variables . 可以在UI中的“管理”选项卡下定义或编辑这些内容。然后,DAG代码可以读取变量的值,并将值传递给它创建的DAG。

    然而,请注意,尽管变量允许您将值与代码解耦,但DAG的所有运行都将读取相同的变量值。如果你想让跑步传递不同的值,最好的选择可能是使用 airflow templating macros 并将宏与run\u id宏或类似宏区分开来

        2
  •  5
  •   ns15    3 年前

    改变DAG行为的两种方法:

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

    UI-从树视图手动触发 enter image description here UI-从浏览创建新的DAG运行(>);DAG运行;创建新记录 enter image description here

    或来自

    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代码中设置有意义的默认值,以便在计划运行期间不使用JSON conf。