将命令行参数传递给 airflow BashOperator

新手上路,请多包涵

有没有办法将命令行参数传递给 Airflow BashOperator。目前,我有一个 python 脚本,它接受一个日期参数并执行一些特定的活动,比如清理比给定日期早的特定文件夹。

在只有一项任务的简化代码中,我想做的是

from __future__ import print_function
from airflow.operators import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta

default_args = {
    'owner'             : 'airflow'
    ,'depends_on_past'  : False
    ,'start_date'       : datetime(2017, 01, 18)
    ,'email'            : ['abc@xyz.com']
    ,'retries'          : 1
    ,'retry_delay'      : timedelta(minutes=5)
}

dag = DAG(
    dag_id='data_dir_cleanup'
    ,default_args=default_args
    ,schedule_interval='0 13 * * *'
    ,dagrun_timeout=timedelta(minutes=10)
    )

cleanup_task = BashOperator(
        task_id='task_1_data_file_cleanup'
        ,bash_command='python cleanup.py --date $DATE 2>&1 >>  /tmp/airflow/data_dir_cleanup.log'
        #--------------------------------------^^^^^^-- (DATE variable which would have been given on command line)
        #,env=env
        ,dag=dag
    )

提前致谢,

原文由 Shiva 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 962
1 个回答

BashOperator 是使用 Jinja2 模板化的,这意味着您可以传递任意值。在你的情况下,它会是这样的:

 cleanup_task = BashOperator(
        task_id='task_1_data_file_cleanup'
        ,bash_command="python cleanup.py --date {{ params.DATE }} 2>&1 >>  /tmp/airflow/data_dir_cleanup.log"
        ,params = {'DATE' : 'this-should-be-a-date'}
        ,dag=dag
    )

另请参阅: https ://airflow.incubator.apache.org/tutorial.html#templating-with-jinja 以获得更广泛的示例。

原文由 Bolke de Bruin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏