web-dev-qa-db-ja.com

airflow dag runのJobIDを取得するにはどうすればよいですか?

Dagrunを実行すると、Airflow UIの「グラフビュー」に、実行された各ジョブの詳細が表示されます。

JobIDは「scheduled__2017-04-11T10:47:00」のようなものです

各Job/Dagrunにかかった時間を維持する追跡とログの作成のために、このJobIDが必要です。

だから私の質問は実行中の同じDAG内でJobIDを取得するにはどうすればよいですかです。

ありがとう、チェタン

10
Chetan J

この値は実際にはrun_idと呼ばれ、コンテキストまたはマクロを介してアクセスできます。

python演算子では、これはコンテキストを介してアクセスされ、bash演算子では、これはbash_commandフィールドのjinjaテンプレートを介してアクセスされます。

マクロで利用できるものの詳細:

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

ジンジャの詳細:

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)

このDAGを例として使用し、各オペレーターのログを確認すると、ログにrun_idが出力されているはずです。

13
jhnclvr