【问题标题】:Is there a way to upload a file via REST in Airflow via the SimpleHttpOperator?有没有办法通过 SimpleHttpOperator 在 Airflow 中通过 REST 上传文件?
【发布时间】:2020-07-08 23:02:10
【问题描述】:

我正在尝试创建一个 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


    【解决方案1】:

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

    详情

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

    run 方法采用request_kwargs 选项,您无法通过SimpleHttpOperator 上的execute 方法访问该选项。使用您自己的 execute 方法或 Callable 编写运算符,您可以明确使用 HttpHook.run(...) 来传递请求的参数,或者您可以选择使用另一个 Python http 库。

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 1970-01-01
      • 2021-08-24
      • 2017-09-28
      • 2019-01-22
      • 2020-09-05
      • 2011-09-19
      • 2010-10-12
      • 1970-01-01
      相关资源
      最近更新 更多