web-dev-qa-db-fra.com

Comment obtenir le JobID pour les analyses de flux d'air?

Lorsque nous faisons un dagrun, sur l'interface utilisateur Airflow, dans la "Vue graphique", nous obtenons des détails sur chaque exécution de travail.

JobID est quelque chose comme "prévu__2017-04-11T10: 47: 00".

J'ai besoin de ce JobID pour le suivi et la création de journaux dans lesquels je conserve le temps que chaque tâche/dagrun a pris.

Donc ma question est comment puis-je obtenir le JobID dans le même dag qui est en cours d'exécution.

Merci, Chetan

10
Chetan J

Cette valeur est en fait appelée run_id et accessible via le contexte ou les macros.

Dans l'opérateur python cela est accessible via le contexte, et dans l'opérateur bash cela est accessible via jinja en utilisant le modèle bash_command champ.

Plus d'informations sur ce qui est disponible dans les macros:

https://airflow.Apache.org/docs/stable/macros.html

Plus d'informations sur jinja:

https://airflow.Apache.org/docs/stable/concepts.html#jinja-templating

from airflow.models import DAG
from datetime import datetime
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator


dag = DAG(
    dag_id='run_id',
    schedule_interval=None,
    start_date=datetime(2017, 2, 26)
)

def my_func(**kwargs):
    context = kwargs
    print(context['dag_run'].run_id)

t1 = PythonOperator(
    task_id='python_run_id',
    python_callable=my_func,
    provide_context=True,
    dag=dag
    )

t2 = BashOperator(
    task_id='bash_run_id',
    bash_command='echo {{run_id}}',
    dag=dag)

t1.set_downstream(t2)

Utilisez ce dag comme exemple et vérifiez le journal de chaque opérateur, vous devriez voir le run_id imprimé dans le journal.

13
jhnclvr