You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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尝试将空字符串转换为整数时失败,结合场景具体原因如下:

  1. Airflow表存在非标准整数字段值:Airflow的部分核心表(如task_instance、dag_run)包含整数类型字段(如try_number、duration),但部分记录中这些字段被存储为空字符串(而非标准的NULL值)。Superset读取数据时会严格按字段定义的类型做转换,空字符串无法转为整数,直接触发报错。
  2. 驱动适配问题:
    • 用MSSQL驱动连接MariaDB属于跨驱动适配,虽能建立连接并读取元数据,但查询阶段的类型转换逻辑与MariaDB的存储格式不兼容。
    • 即使使用mysql+mysqldb驱动,Superset 2.0对该驱动的类型映射逻辑,在处理Airflow表的特殊空值场景时存在缺陷。
  3. 版本兼容性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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:54:31