通过 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 macro
s 上已经足够卖了:[1] @987654323 @ [2] 自定义参数(还有更多 [3]、[4] .. 吗?)。但即使经过一番细致的研究,我也不清楚宏s如何产生将参数传递给DAG
s / Operator
s 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()