Airflow中HttpSensor如何设置execution_date执行日期
解法
Airflow 中所有支持 Jinja 模板渲染的算子参数,都可以直接在参数值里通过双大括号引用上下文变量,不需要像 PythonOperator 那样显式从 kwargs 中取值。HttpSensor 的 endpoint 参数本身就被标记为模板字段,运行时会自动完成渲染,直接传入日期变量即可。
基础用法(常用日期格式)
如果你需要传入格式为YYYY-MM-DD的执行日期,直接用 Airflow 内置的ds变量即可,这是官方预定义的格式化好的执行日期字符串:
is_api_available = HttpSensor( task_id='is_api_available', http_conn_id='data_available', endpoint='api/3/action/date={{ ds }}' )
自定义日期格式
如果需要其他格式的日期,可以直接在模板中调用execution_date对象的strftime方法自定义格式,比如要传入无间隔的YYYYMMDD格式日期:
is_api_available = HttpSensor( task_id='is_api_available', http_conn_id='data_available', endpoint='api/3/action/date={{ execution_date.strftime("%Y%m%d") }}' )
补充说明
- 你可以直接在模板中使用所有 Airflow 内置的上下文变量,常用的日期相关变量包括:
ds:YYYY-MM-DD格式的执行日期ds_nodash:无分隔符的YYYYMMDD格式执行日期ts:带时区的ISO格式执行时间戳execution_date:完整的 Pendulum 时间对象,支持所有原生 datetime 类的方法调用
- 所有官方算子的可模板参数都可以在对应类的
template_fields属性里查到,常见的比如 BashOperator 的bash_command、SQL 执行类算子的sql参数都支持这种模板写法,不需要额外做参数传递配置。
内容的提问来源于stack exchange,提问作者CompEng
相关产品推荐
相关产品推荐

