如何暂停/取消暂停气流中的多个 dags

How to pause / Un pause multiple dags in airflow

我们有 100 个前缀为“dag_EDW_HC_*”的 dag。我们有以下命令暂停 dag

Command: airflow pause dag_id

有什么方法可以一次性暂停所有 100 个 dags“dag_EDW_HC_*”..(在 python 中以编程方式或任何其他方式)..?

我能想到的绝对最简单(并且可能最快)的方法是更新数据库:

UPDATE  dag
   SET  is_paused = false
 WHERE  dag_id LIKE 'dag_EDW_HC%';

如果您想定期执行此操作,您可以专门为此目的创建一个 DAG,并为此创建相应的 PythonOperator,并在触发 DAG 时指定参数。 从 运行 任务实例(在我们传递给 PythonOperatorpython_callable 函数中或在自定义运算符的 execute 方法中)您可以访问 DagBag 对象,其中包含加载到 Airflow 环境中的所有 DAG 的 dag id,您可以使用它来获取 DagModel-s,您可以循环遍历并暂停所有 DAG:

def python_callable():
   dag_bag = DagBag(read_dags_from_db=False)
   for dag_id_ in dag_bag.dag_ids:
       dag_model = airflow.models.dag.DagModel.get_dagmodel(dag_id_)
       dag_model.set_is_paused(True)

当前代码适用于 2.0.1 版本,不同版本的 Airflow 可能有所不同。如果此调用不适合您,您应该检查您的 Airflow 服务器版本的文档。