Airflow中如何提取Context["execution_date"]与DR.exuection_date的日份
Airflow 提取日期日份比对实现方案
在Airflow做任务调度开发时,需要提取Context["execution_date"]、DR.execution_date两个对象的日份做一致性校验,典型需求是从01-04-2022格式的日期中取出日份值04,具体实现分两种场景处理:
处理Airflow原生日期对象
Airflow 上下文、TaskInstance相关属性里拿到的execution_date本身是Pendulum日期对象,完全兼容Python标准datetime接口,不需要转字符串再做拆分,直接调用内置属性就能拿到日份:
# 分别提取两个日期对象的日份数值 context_exec_day = context["execution_date"].day dr_exec_day = DR.execution_date.day # 直接做数值比对即可判断日份是否一致 if context_exec_day == dr_exec_day: # 日份一致时的业务逻辑 pass # 如果需要拿到带前导零的两位日份字符串(比如示例中的04),直接格式化输出即可 context_exec_day_str = context["execution_date"].strftime("%d")
不要直接对原生日期对象做字符串拆分操作,不仅代码冗余,一旦Airflow默认日期输出格式调整,拆分逻辑会直接失效。
处理dd-mm-yyyy格式的日期字符串
如果拿到的已经是格式化完成的字符串类型日期,两种简单方式提取日份:
- 按分隔符拆分,直接取对应位置的值,写法最简洁
date_str = "01-04-2022" day_str = date_str.split("-")[1] # 输出结果为'04'
- 先转成日期对象再提取日份,容错性更高,不会因为字符串前后多空格、分隔符异常等小问题直接报错
from datetime import datetime date_str = "01-04-2022" date_obj = datetime.strptime(date_str, "%d-%m-%Y") day_str = date_obj.strftime("%d")
内容的提问来源于stack exchange,提问作者Naveen Gupta
相关产品推荐
相关产品推荐

