次のリンクを見つけました:
https://www.linkedin.com/Pulse/airflow-lesson-1-triggerdagrunoperator-siddharth-anand
確かに、TriggerDagRunOperator
を使用して個別のAirflow dagを実行する方法を説明しています。ドキュメントではAirflow独自の例を使用していますが、センサーを使用していないため、理解に苦労しています。
TriggerDagRunOperator
とSqlSensor
を使用して別のDAGを開始する方法を誰かが説明できますか? SQL Serverジョブタスクが完了したら、別のDAGを開始しようとしています。 SqlSensor
を使用してSQL Serverジョブのステータスを確認する方法は知っていますが、別のDAGを開始するために結果をTriggerDagRunOperator
にアタッチする方法がわかりません。
Airflow CLIを使用したり、1つのDAGで両方のタスクを実行したりしたくありません。基本的に、私はこれがトリガーのダグのみであることを望みます。
以下は私の重要なコードが欠けている現在のコードですconditionally_trigger
# File Name: check-when-db1-sql-task-is-done
from airflow import DAG
from airflow.operators import TriggerDagRunOperator
from airflow.operators import SqlSensor
from datetime import datetime
default_args = {
'owner': 'airflow',
'retry_delay': timedelta(minutes=5),
}
dag = DAG('check-when-db1-sql-task-is-done',
description='Check-when-DB1-SQL-task-is-done',
default_args=default_args,
schedule_interval='@once',
start_date=datetime.now(),
)
# returns-0-or-1-based-on-job-task-status
sqlsensor = SqlSensor (
task_id='sql-sensor',
poke_interval=30,
timeout=3200,
sql="""select last_run_outcome from msdb.dbo.sysjobsteps where job_id = '249A5A5D-6AFC-4D6B-8CB1-27C16724A450' and step_id = '1' and last_run_date = (select convert(varchar(24),getdate(),112)); """,
mssql_conn_id='db1',
dag=dag,
)
# dag-to-start
trigger = TriggerDagRunOperator (
task_id='start-ssh-job',
trigger_dag_id="qa-knime-ssh-task",
python_callable=conditionally_trigger,
params={'condition_param': True,
'message': 'Hello World'},
dag=dag)
私の理解では、TriggerDagRunOperator
はpython関数を使用してSubDagをトリガーするかどうかを決定する場合に使用します。この関数はconditionally_trigger
と呼ばれます。コードと例。
あなたの場合、センサーを使用してフローを制御しており、関数を渡す必要はありません。 SubDagOperator
の代わりにTriggerDagRunOperator
を使用するか、単純なalways-true関数をpython_callable
として渡すことができます。
...
python_callable=lambda(context, dag_run_obj):dag_run_obj,
...