google-cloud-platform - PythonOperator 或 SimpleHttpOperator 发出 HTTP 获取请求并将结果保存到 GCP 存储
问题描述
我处于学习 Airflow 的早期阶段。我正在学习 Airflow 来构建一个简单的 ETL(ELT?)数据管道,并且正在研究管道的架构(我应该使用哪些运算符)。我的数据管道的基础是:
- 从 API 发出 HTTP GET 请求以获取原始数据。
- 将原始 JSON 结果保存到 GCP 存储桶中。
- 转换数据并保存到 BigQuery 数据库中。
...并且管道将安排为每天运行一次。
正如标题所示,我正在尝试确定 SimpleHttpOperator 或 PythonOperator 是否更适合用于发出 HTTP GET 数据请求。从这篇有点相关的 stackoverflow 帖子stackoverflow post中,作者简单地得出结论:
虽然我想从现在开始我会简单地使用 PythonOperator
编写一个 10-20 行代码的 Python 脚本来发出 http 请求、识别 GCP 存储桶并写入该桶似乎很简单。但是,我不确定这是否是此类任务的最佳方法(调用 api --> 获取数据 --> 写入 gcp 存储桶)。
对此的任何帮助或想法,有关构建类似管道的任何示例链接等都将非常有帮助。提前致谢
解决方案
我建议您将气流视为处理步骤之间的粘合剂。对 Airflow 执行的处理应该是有条件地触发或不触发步骤,对步骤进行循环并处理错误。
为什么?因为,如果明天您选择更改您的工作流应用程序,您将不必再次编码您的流程,您只需重写工作流逻辑(因为您更改了工作流应用程序)。一个简单的关注点分离。
因此,我建议您将 10-20 行 python 代码部署到 Cloud Functions 中,并设置一个 SimpleHTTPOperator 来调用它。此外,函数比工作流(运行和查看代码)要容易得多。部署和更新也将更容易。
推荐阅读
- python - 如何使用python将NPZ文件转换为文本文件
- android - 无法从 OnPageChangeCallBack 中的 ViewPager2 获取 ScrollView
- python - 我如何在 Python 中嵌入 Discord 中换行?
- reactjs - Rxjs 和 React 状态钩子导致多个 API 调用和重新渲染
- javascript - node.js 中的 inlineable 是什么?
- c++ - 无法使用 lambda 参数编译 boost::spirit::x3 解析器
- flutter - Flutter PhotoView - 围绕手指之间的点旋转
- reactjs - 更改状态后,React 组件不会重新渲染
- javascript - VueJS | 如何在 vue.js 中获取 url 参数?
- python - 从 Django 数据库中检索超过当前时间的日期