可以将更新语句嵌套在case语句中吗?

时间:2020-09-29 14:59:19

标签: sql airflow

我无法确定是否允许这种类型的工作流程。您可以将更新查询嵌套在case语句中吗?

我有一个大型DAG,其中许多任务汇入“收费站”任务,以确保所有上游任务都已完成,然后再继续执行下一个任务。有时,由于没有数据,某些任务将失败。我希望初始任务能够根据此任务的成功/失败来提前确定是否要运行其他下游任务。

一个想法是,如果初始任务失败,让气流提前将相关的下游任务标记为成功,然后跳过实际运行它们。 (由于我们的“收费公路”任务的性质,由于各种原因需要all_success,因此我无法将它们设置为跳过。

是否可以使用case语句,使得如果存在数据,则按常规进行,如果失败,则将与task_instance元数据相关的下游任务更新为成功,这样就不必触发/运行?我下面有一些伪代码来帮助解释我要完成的工作。

select
    case
        when table_a like 'similar_to_table_a' or table_name like 'similar_to_table_b' and DATE_ID = yesterday
            then DATE_ID
        when table_a like 'similar_to_table_a' or table_name like 'similar_to_table_b' and DATE_ID != yesterday
            then UPDATE task_metadata_table
                set task_a status = 'success' --sets a downstream task to success ahead of time, to skip its run
                set task_b status = 'success' --sets a downstream task to success ahead of time, to skip its run
        else OTHER_DATE_ID
    end as WHICH_DATE_ID,
from schema.table_name
where id_number = 1007 and table_name = 'my_table_name'

0 个答案:

没有答案