Airflow: how to delete a DAG?

前端 未结 16 970
感动是毒
感动是毒 2020-11-28 23:45

I have started the Airflow webserver and scheduled some dags. I can see the dags on web GUI.

How can I delete a particular DAG from being run and shown in web GUI? I

相关标签:
16条回答
  • 2020-11-29 00:17

    This is my adapted code using PostgresHook with the default connection_id.

    import sys
    from airflow.hooks.postgres_hook import PostgresHook
    
    dag_input = sys.argv[1]
    hook=PostgresHook( postgres_conn_id= "airflow_db")
    
    for t in ["xcom", "task_instance", "sla_miss", "log", "job", "dag_run", "dag" ]:
        sql="delete from {} where dag_id='{}'".format(t, dag_input)
        hook.run(sql, True)
    
    0 讨论(0)
  • 2020-11-29 00:17

    I've written a script that deletes all metadata related to a specific dag for the default SQLite DB. This is based on Jesus's answer above but adapted from Postgres to SQLite. Users should set ../airflow.db to wherever script.py is stored relative to the default airflow.db file (usually ~/airflow). To execute, use python script.py dag_id.

    import sqlite3
    import sys
    
    conn = sqlite3.connect('../airflow.db')
    c = conn.cursor()
    
    dag_input = sys.argv[1]
    
    for t in ["xcom", "task_instance", "sla_miss", "log", "job", "dag_run", "dag" ]:
        query = "delete from {} where dag_id='{}'".format(t, dag_input)
        c.execute(query)
    
    conn.commit()
    conn.close()
    
    0 讨论(0)
  • 2020-11-29 00:19

    You can clear a set of task instance, as if they never ran with:

    airflow clear dag_id -s 2017-1-23 -e 2017-8-31
    

    And then remove dag file from dags folder

    0 讨论(0)
  • 2020-11-29 00:21

    For those who have direct access to the Postgres psql console of the airflow db, you can simply execute the following request to remove the DAG:

    \set dag_id YOUR_DAG_ID
    
    delete from xcom where dag_id=:'dag_id';
    delete from task_instance where dag_id=:'dag_id';
    delete from sla_miss where dag_id=:'dag_id';
    delete from log where dag_id=:'dag_id';
    delete from job where dag_id=:'dag_id';
    delete from dag_run where dag_id=:'dag_id';
    delete from dag where dag_id=:'dag_id';
    

    A similar (with minor changes) query is suitable for other databases, such as MySQL and SQLite.

    0 讨论(0)
提交回复
热议问题