web-dev-qa-db-ja.com

TriggerDagRunOperatorを使用してAirflow -dagをトリガーする方法

次のリンクを見つけました:

https://www.linkedin.com/Pulse/airflow-lesson-1-triggerdagrunoperator-siddharth-anand

確かに、TriggerDagRunOperatorを使用して個別のAirflow dagを実行する方法を説明しています。ドキュメントではAirflow独自の例を使用していますが、センサーを使用していないため、理解に苦労しています。

TriggerDagRunOperatorSqlSensorを使用して別の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)
11
Mika Heino

私の理解では、TriggerDagRunOperatorはpython関数を使用してSubDagをトリガーするかどうかを決定する場合に使用します。この関数はconditionally_triggerと呼ばれます。コードと例。

あなたの場合、センサーを使用してフローを制御しており、関数を渡す必要はありません。 SubDagOperatorの代わりにTriggerDagRunOperatorを使用するか、単純なalways-true関数をpython_callableとして渡すことができます。

...
python_callable=lambda(context, dag_run_obj):dag_run_obj,
...
6
7yl4r