在一个 dag 上多次循环执行许多气流任务

时间:2021-01-10 09:30:51

标签: airflow google-cloud-composer

我正在创建一个具有以下任务结构的 dag。此 DAG 将按计划运行 UTC 时间每天凌晨 1:00。 从数据库中获取行 ---- 在行上循环以运行许多需要每行数据的任务。

例如,我的 DAG 中有调用 MySQL 数据库并返回多行的方法。每行数据我必须将 4 个任务作为参数传递。我遵循了一些谷歌搜索文档,但没有正确运行。

return_db_result 是在 GCP 中从 Cloud SQL 获取结果的方法。

def return_result():
    db_engine_connection = create_cloud_sql_connection()
    session = get_db_session(db_engine_connection)
    result = session.query(Scheduled).filter(Scheduled.job_status == "Scheduled").all()
    session.commit()
    return result

我尝试使用 for 循环,如下所示

for row in return_result():
    op1 = operator({ param=row.id})
    op2 = operator({ param=row.id})
    op3 = operator({ param=row.id})
    op4 = operator({ param=row.id})
    op1 >> op2 >> op3 >> op4

但是这些任务没有显示在气流 UI 上。

1 个答案:

答案 0 :(得分:0)

根据您的评论,假设您的运营商是:

    val requestOptions = RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL)
Glide.with(context).load(url).apply(requestOptions).into(imageView)

您可以按如下方式使用它:

class MyOperator(BaseOperator):
    @apply_defaults
    def __init__(self,
                 input_id,
                 input_date,
                 input_status,
                 *args, **kwargs):

        super(MyOperator, self).__init__(*args, **kwargs)
        self.input_id=input_id
        self.input_date=input_date
        self.input_status=input_status

    def execute(self, context):
        pass