airflow - 有没有办法通过 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”参数。有没有人在气流中实现过这样的东西?谢谢!
解决方案
因此,如果不提供或编写自己的代码,就无法做到这一点。你有几种方法可以做到这一点。子类化SimpleHttpOperator
并重写执行方法,以便 HttpHook
使用正确的参数调用。为您的特定情况子类化BaseOperator
,并且基本上做同样的事情。或者将 Python 功能写入 Python Callable 并使用PythonOperator
.
细节
如果你查看HttpHook,你可以看到 的执行SimpleHttpOperator
,很大程度上只是使用了 Python requests 库。
并且该方法run
采用request_kwargs
您无法通过. 使用您自己的方法或 Callable 编写一个运算符,您可以明确地使用它来传递您的请求的参数,或者您可以选择使用另一个 Python http 库。execute
SimpleHttpOperator
execute
HttpHook.run(...)
推荐阅读
- laravel - 我可以在 laravel 和 mongodb 中更新我的密码吗?
- sql-server - CTE 基于输入创建递归动态行和列
- python - 如何在sqlalchemy中选择列存在
- java - 从 java 应用程序发送时没有在服务器中获取正确的 json
- python - Plotly-Dash:如何打印条形图的 hoverData?
- javascript - 如何在 jquery 中创建一个按钮,其 href 属性等于 ajax 响应
- php - 使用 php mailer 邮件从 localhost xamp 成功发送,但未能在生产 Windows 托管中发送
- angular - 如何在不重新加载整个站点的情况下更新子组件
- c++ - C ++:即使使用“this”关键字,参数声明也会隐藏类成员
- react-native - React-native 使 List-FlatList 与 Texts 可滚动