首页 > 解决方案 > 有没有办法通过 SimpleHttpOperator 在 Airflow 中通过 REST 上传文件?

问题描述

我正在尝试创建一个 Airflow DAG 来查询一些数据,将其保存为 CSV 文件并将其上传到 REST API 端点。我用一个shell脚本和一个像这样的CURL命令实现了这个:

curl --location --request POST 'https://my.endpoint.com/automations-file-service/automations/fileupload/files' \
--header 'X-API-TOKEN: my_token' \
--form 'file=@/Users/myuser/myfiles/all_20200707_2.csv'

我正在尝试将其移至 Airflow,并希望通过 SimpleHttpOperator 将该 CURL 命令转换为 Airflow。问题是,我在运算符中找不到可以添加文件路径的任何参数,没有“form”参数。有没有人在气流中实现过这样的东西?谢谢!

标签: airflow

解决方案


因此,如果不提供或编写自己的代码,就无法做到这一点。你有几种方法可以做到这一点。子类化SimpleHttpOperator并重写执行方法,以便 HttpHook使用正确的参数调用。为您的特定情况子类化BaseOperator,并且基本上做同样的事情。或者将 Python 功能写入 Python Callable 并使用PythonOperator.

细节

如果你查看HttpHook,你可以看到 的执行SimpleHttpOperator,很大程度上只是使用了 Python requests 库。

并且该方法run采用request_kwargs您无法通过. 使用您自己的方法或 Callable 编写一个运算符,您可以明确地使用它来传递您的请求的参数,或者您可以选择使用另一个 Python http 库。executeSimpleHttpOperatorexecuteHttpHook.run(...)


推荐阅读