我想在触发器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
答案 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