Superset连接MariaDB查询时报错:invalid literal for int() with base 10: ''
问题分析:Superset查询Airflow MariaDB后端报整数转换错误
环境与操作背景
- 环境:MariaDB 10.5、Python 3.8、Superset 2.0,均部署于K8S集群
- 操作:尝试将Superset连接至Airflow的MariaDB后端数据库,先后使用两种方式创建连接:
- MSSQL驱动
- SQLALCHEMY URI:
mysql+mysqldb://user:pass@ip:3306/airflow_db
- 问题:连接成功,可正常查看库、表、列结构,但执行任意表或字段查询时触发错误:
invalid literal for int() with base 10: ''
错误原因
这个错误的核心是Superset尝试将空字符串转换为整数时失败,结合场景具体原因如下:
- Airflow表存在非标准整数字段值:Airflow的部分核心表(如
task_instance、dag_run)包含整数类型字段(如try_number、duration),但部分记录中这些字段被存储为空字符串(而非标准的NULL值)。Superset读取数据时会严格按字段定义的类型做转换,空字符串无法转为整数,直接触发报错。 - 驱动适配问题:
- 用MSSQL驱动连接MariaDB属于跨驱动适配,虽能建立连接并读取元数据,但查询阶段的类型转换逻辑与MariaDB的存储格式不兼容。
- 即使使用
mysql+mysqldb驱动,Superset 2.0对该驱动的类型映射逻辑,在处理Airflow表的特殊空值场景时存在缺陷。
- 版本兼容性bug:Superset 2.0对MariaDB 10.5的类型支持存在不完善之处,针对非标准整数空值的容错处理缺失。
临时解决方向
- 修复Airflow表的异常数据:将整数字段中的空字符串替换为合法值(如
0或NULL),示例SQL:UPDATE task_instance SET try_number = 0 WHERE try_number = ''; UPDATE dag_run SET duration = NULL WHERE duration = ''; - 更换驱动:改用
mysql+pymysql驱动的SQLALCHEMY URI:mysql+pymysql://user:pass@ip:3306/airflow_db,该驱动对MariaDB的类型转换兼容性更优。 - 升级Superset:更新至2.1及以上版本,官方后续版本修复了部分MariaDB类型适配问题。
内容的提问来源于stack exchange,提问作者Alex k
相关产品推荐
相关产品推荐

