Apache Airflow-如何使用目标DAG中的TriggerDagRunOperator设置执行日期以使用当前的执行日期

时间:2018-12-14 11:19:59

标签: airflow

我想在触发器DAG中设置execution_date。我正在使用运算符TriggerDagRunOperator,该运算符的参数为execute_date,我想设置当前的execute_date。

def conditionally_trigger(context, dag_run_obj):
    """This function decides whether or not to Trigger the remote DAG"""
    pp = pprint.PrettyPrinter(indent=4)
    c_p = Variable.get("VAR2") == Variable.get("VAR1") and Variable.get("VAR3") == "1"
    print("Controller DAG : conditionally_trigger = {}".format(c_p))
    if Variable.get("VAR2") == Variable.get("VAR1") and Variable.get("VAR3") == "1":
        pp.pprint(dag_run_obj.payload)
        return dag_run_obj

default_args = {
    'owner': 'pepito',
    'depends_on_past': False,
    'retries': 2,
    'start_date': datetime(2018, 12, 1, 0, 0),
    'email': ['xxxx@yyyyy.net'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retry_delay': timedelta(minutes=1)
}

dag = DAG(
    'DAG_1',
    default_args=default_args,
    schedule_interval="0 12 * * 1",
    dagrun_timeout=timedelta(hours=22),
    max_active_runs=1,
    catchup=False
)

trigger_dag_2 = TriggerDagRunOperator(
    task_id='trigger_dag_2',
    trigger_dag_id="DAG_2",
   python_callable=conditionally_trigger,
    execution_date={{ execution_date }},
   dag=dag,
   pool='a_roz'
)

但是我遇到下一个错误

  

名称“执行日期”未定义

如果我设置

execution_date={{ 'execution_date' }},

execution_date='{{ execution_date }}',

我得到

  

回溯(最近通话最近一次):

     

文件“ /usr/local/lib/python3.6/site-packages/airflow/models.py”,行1659,在_run_raw_task中

     

结果= task_copy.execute(context = context)

     

在执行中的文件“ /usr/local/lib/python3.6/site-packages/airflow/operators/dagrun_operator.py”,第78行

     

replace_microseconds = False)

     

文件“ /usr/local/lib/python3.6/site-packages/airflow/api/common/experimental/trigger_dag.py”,行98,在trigger_dag中

     

replace_microseconds = replace_microseconds,

     

文件“ /usr/local/lib/python3.6/site-packages/airflow/api/common/experimental/trigger_dag.py”,第45行,位于_trigger_dag

     

声明时区。is_localized(执行日期)

     

is_localized中的文件“ /usr/local/lib/python3.6/site-packages/airflow/utils/timezone.py”,第38行

     

返回值。utcoffset()不为无

     

AttributeError:'str'对象没有属性'utcoffset'

如果我想等于DAG_1,有人知道如何设置DAG_2的执行日期吗?

这个问题与airflow TriggerDagRunOperator how to change the execution date不同,因为在这篇文章中没有解释如何通过运算符TriggerDagRunOperator发送execute_date,只是说存在这种可能性。 https://stackoverflow.com/a/49442868/10269204

2 个答案:

答案 0 :(得分:0)

您会收到此错误,因为execution_date中的TriggerDagRunOperator不是模板字段。它需要一个日期时间对象。

示例:

import datetime
execution_date = datetime.datetime.now()

然后您可以使用此变量传递到execution_date中的TriggerDagRunOperator

答案 1 :(得分:0)

您可以尝试

from datetime import datetime, timezone
execution_date=datetime(2019, 3, 27, tzinfo=timezone.utc)
execution_date=datetime.now().replace(tzinfo=timezone.utc)

此外,它现在已成为模板,但请检查您使用的版本 commit