如何在Airflow中的SSHOperator中传递动态参数?

时间:2019-08-05 02:07:03

标签: airflow

我想使用datetime参数运行每天运行的任务。例如python flow 20190801,因此日期是一个动态参数。

我在jinja模板中尝试过,但是似乎不起作用(无法读取{{ DATE }}参数)。 那里有什么问题?还是有更好的解决方案来实现相同的目的?

这是代码段。

compress_task = SSHOperator(
    task_id='test_task',
    ssh_conn_id='exporter_ssh',
    depends_on_past=True,
    command='python flows.py compress -d {{ DATE }} ',
    params={"DATE": str(datetime.today().date()).replace('-', '')},
    dag=dag
)

我知道解决方案之一是使用$(date '+%Y%m%d'),但是它始终是当前执行日期,而不是任务计划日期。

2 个答案:

答案 0 :(得分:2)

我只是知道它可以实现with macros

compress_task = SSHOperator(
    task_id='test_task',
    ssh_conn_id='exporter_ssh',
    depends_on_past=True,
    command='python flows.py compress -d {{ ds_nodash }}',
    dag=dag
)

答案 1 :(得分:1)

如果您要使用dt['col2'] = dt.col.str.split('_', expand = True).fillna('all')[1] 字典中指定的参数进行Jinja模板化,则需要先引用params,即params来访问它们。因此,根据您的情况,应该是

{{ params.DATE }}

但是,在涉及与任务/数据执行相关的时间戳和日期时,最好使用built-in macros,如您已经指出的那样。