我能够在python代码中访问宏,如下所示:
partition_dt = macros.ds_add(ds, 1)
但是我无法弄清楚如何抓住ds
变量本身似乎只能在模板中访问。有什么指针吗?
答案 0 :(得分:16)
我假设您要调用其中一个内置AirFlow ds的默认变量 - 执行日期为YYYY-MM-DD
要调用ds,您可以执行以下操作:
EXEC_DATE = '{{ ds }}'
打电话给你想要的东西 - macros.ds_add:
EXEC_DATE = '{{ macros.ds_add(ds, 1) }}'
以这种方式加载:
T1 = BashOperator(\
task_id='test_ds',
bash_command='echo ' + EXEC_DATE
dag=DAG)
如果你想格式化它(就像我必须的那样),你可以这样做:
EXEC_DATE = '{{ macros.ds_format(macros.ds_add(ds, 1), "%Y-%m-%d", "%Y%m%d") }}'
答案 1 :(得分:1)
简短回答,ds和宏变量只能通过模板访问,因为它们仅在执行期间存在,而不是在python代码解析期间(当气流加载dag时)。
问题与这个问题非常类似:execution_date in airflow: need to access as a variable我尝试解释两个步骤之间的区别以及如何在最后一个答案中的变量中执行日期:https://stackoverflow.com/a/45725005/3756307