如何从 SimpleHttpOperator 访问 GET 内容

How to access GET content from SimpleHttpOperator

我了解到,通过在 SimpleHttpOperator 中设置 xcom_push=True,我可以从 访问 Xcom 返回的数据。但我不太清楚我该怎么做。是通过创建一个带有回调的 PythonOperator 并在回调中调用 xcom_pull 吗?一些示例代码会很高兴看到。

我想做的是从 Google Finance 读取股票价格数据作为 CSV 数据,然后将它们插入 MySQL 数据库以了解 Airflow。最初我以为我可以只使用两个运算符:

SimpleHttpOperator >> MySqlOperator

但现在我想我必须在中间添加 PythonOperator?:

SimpleHttpOperator >> PythonOperator >> MySqlOperator

在 PythonOperator 中,我是否需要将 provide_context 设置为 True 才能访问 xcom 值?

你很接近,但我会使用一个 HttpHook 和一个 MySqlHook 并将它们粘在一起在你自己的 PythonOperator 中。钩子是较低级别的原语。

我认为 Operator 是执行操作(发送电子邮件、检索状态)或在 A 和 B 之间传输数据(其中之一通常是 temporary/staging 位置)的东西。另一方面,Hook 更像是一个开放的数据源或目的地。

一个很好的 Airflow 介绍性博客 post 完全涵盖您的场景(以及更多)是这个:http://tech.marksblogg.com/airflow-postgres-redis-forex.html

您可能会认为构建自己的 PythonOperator 涉及很多,但正如您在 the full DAG code in the blog above 中看到的那样,大多数运算符实际上是在检查传入数据。

我在 Airflow 指南的某个地方读到,Xcom 并不是真正意味着在您的管道中交换(可能是巨大的)数据的主要方式。它更适用于在 DAG 中跨任务推送参数。