在Airflow中,是否可以将用户输入从DAG传递到子DAG?

3

我正在尝试根据用户输入在Airflow中生成动态工作流。我知道有基于文件和数据库的选项,但在所有这些情况下,工作流都不会直接依赖于用户输入。而且,在多个用户使用同一个dag的情况下,可能会出现问题。为了避免这些问题,我考虑将用户输入传递给子dag并生成工作流程。但是,子dag没有从ui传递用户输入的选项。

4个回答

1

我猜使用变量是解决问题的好方法,但用户可能会覆盖彼此的更改(可能会出现一些问题)。

备选方案1:

Airflow在顶部具有REST API,支持dag触发功能。

请求示例:

curl -X POST \
'http://localhost:8080/api/experimental/dags/<DAG_ID>/dag_runs' \
--header 'Cache-Control: no-cache' \
--header 'Content-Type: application/json' \
--data '{"conf":"{\"key\":\"value\"}"}'

数据部分可以存储一些用户输入,稍后将在Airflow操作器中访问。

更多文档:https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html#operation/get_import_error

备选方案2:

Airflow支持CLI界面,可用于触发DAG。您可以将额外的配置作为配置参数(-c选项)指定。配置可以存储用户输入。

命令格式:

airflow trigger_dag [-h] [-sd SUBDIR] [-r RUN_ID] [-c CONF] [-e EXEC_DATE]
                    dag_id

更多文档:http://airflow.apache.org/docs/apache-airflow/1.10.5/cli.html#trigger_dag StackOverflow问题展示了如何在Airflow操作符中访问配置参数:通过CLI访问传递给Airflow的配置参数

1

根据文档,您可以在Airflow中使用Variable

Variables是一种通用的方式,在Airflow中作为简单的键值存储来存储和检索任意内容或设置。变量可以从UI(管理 -> 变量)、代码或CLI中列出、创建、更新和删除。

您可以参考以下链接以进一步了解:


我也探索了那个选项,但是当多个用户同时运行dag时会发生什么?我没有得到这些问题的明确答案,这就是我正在寻找的东西,可以从主dag中获取用户输入并将其传递给子dag以生成动态任务列表。 - Raj

0

对于 DAG 中的动态任务,我需要在子DAG中的任务外部使用变量。但是,在操作符之外读取xcom参数是不可能的。 - Raj

0

有很多技巧可以完成同样的任务,但实际解决方案应该来自于 airflow 的动态任务,目前还不存在。希望我们能在未来版本的 airflow 中看到它。


我也在寻找类似的东西。你能告诉我们你是怎么做到的吗? - Anand Sai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接