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

Posted

技术标签:

【中文标题】通过 UI 将参数传递给 Airflow 的作业【英文标题】:Passing parameters to Airflow's jobs through UI 【发布时间】:2018-05-03 23:08:39 【问题描述】:

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

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

【问题讨论】:

我需要类似的东西,你找到方法了吗? @LuisLeal 您可以考虑 Bryan 回答中的气流变量。 【参考方案1】:

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

但是请注意,尽管变量允许您将值与代码分离,但 DAG 的所有运行都将为变量读取相同的值。如果您希望运行传递不同的值,最好的办法可能是使用 airflow templating macros 并使用 run_id 宏或类似宏来区分宏

【讨论】:

一般来说,我想用不同的参数并行运行一个脚本。我不能用全局变量来做到这一点。据我了解,宏包包含常量和一些函数,如日期和 uuid,但我想传递一个通用字符串。所以,总而言之,我看到了这个解决方案:创建 n 个脚本和 n 个全局变量。在这种情况下,可以并行运行 n 个作业。无论如何,谢谢你的回答。 @Bryan, @AlexanderErshov 我在template macros 上已经足够卖了:[1] @987654323 @ [2] 自定义参数(还有更多 [3]、[4] .. 吗?)。但即使经过一番细致的研究,我也不清楚s如何产生将参数传递给DAGs / Operators from Airflow'的效果s WebUI。对此有何指点?【参考方案2】:

改变 DAG 行为的两种方法:

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

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

或来自

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

【讨论】:

以上是关于通过 UI 将参数传递给 Airflow 的作业的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI - 将参数传递给 read().data() 中的 JS 函数

Kendo UI - 将参数传递给read()中的JS函数.data()

通过 pydatalab 将任何选项/参数传递给 BigQuery

Python:如何将参数传递给线程作业(回调)

将参数传递给 TWS 作业的 Cobol 程序

如何将参数传递给flutter integration_test?