Airflow日志出现execution_date日期格式错误警告求解决方案
解决Airflow中execution_date的datetime格式警告与显示异常问题
我之前帮团队解决过完全一样的问题!这个警告和执行时间异常的根源,其实是MySQL版本与Airflow默认的datetime格式不兼容——尤其是当你的MySQL版本低于5.6.4时,它不支持带时区的微秒级datetime类型,而Airflow默认会生成带时区的时间戳(比如2019-09-19 12:43:01.642075+00:00),直接写入就会触发警告,后续的时间解析也会出错,导致显示异常。
以下是亲测有效的解决步骤:
1. 先确认你的MySQL版本
登录MySQL执行这条命令查看版本:
SELECT VERSION();
如果版本低于5.6.4,要么升级MySQL,要么按下面的配置修改来适配旧版本;如果版本符合要求,那大概率是数据库连接配置的时区问题。
2. 修改Airflow配置适配格式
找到你的Airflow主配置文件(一般是airflow.cfg),做两处关键修改:
- 在
[core]段,更新数据库连接字符串,指定时区并确保驱动兼容:
这里的sql_alchemy_conn = mysql+pymysql://your_username:your_password@db_host:db_port/airflow_db?charset=utf8mb4&time_zone=%2B00%3A00%2B00%3A00是URL编码后的+00:00(UTC时区),避免时区转换时出现格式混乱,同时推荐用pymysql驱动替代mysql-connector-python,兼容性更好。 - 在
[operators]段,给默认参数添加强制格式转换:
这会把Airflow生成的带微秒和时区的时间,转换成MySQL能识别的标准datetime格式。default_args = { "execution_date": "{{ execution_date.strftime('%Y-%m-%d %H:%M:%S') }}" }
3. 修复已存在的异常数据
如果已经有任务的execution_date显示异常(比如09-19T05:00:00+00:00这种格式),需要手动更新数据库里的记录:
UPDATE task_instance SET execution_date = STR_TO_DATE(LEFT(execution_date, 19), '%Y-%m-%d %H:%M:%S') WHERE execution_date LIKE '%+00:00';
这条SQL会把带时区的字符串截取前19位,转换成标准datetime格式。如果你的时区不是UTC,记得调整对应的转换逻辑。
4. 验证修复效果
重启Airflow的scheduler和webserver服务,跑一个测试任务:
- 查看日志,确认
sqlalchemy/engine/default.py的警告是否消失; - 检查任务的execution_date显示是否恢复正常(应该是类似
2019-09-19 12:43:01的格式)。
内容的提问来源于stack exchange,提问作者Ronen Amsalem
相关产品推荐
相关产品推荐

