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

Docker部署Superset连接Azure Databricks失败求助

连接Superset与Azure Databricks时的TypeError问题解决方法

问题背景

通过Docker部署Superset并完成登录,操作流程如下:

  • 在/superset/docker/目录下创建requirements-local.txt文件,添加依赖databricks-dbapi[hive,odbc,sqlalchemy]
  • 执行docker-compose build --force-rm命令重新构建镜像
  • 执行docker-compose -f docker-compose-non-dev.yml启动服务,Superset正常运行且可登录

尝试连接Azure Databricks时的操作:

  1. 进入「Data」->「Connect a database」,在支持数据库列表中选择「Databricks SQL Endpoint」
  2. 在SQLALCHEMY URI输入框填入:databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name}
  3. 在ADVANCED->Other->ENGINE PARAMETERS区域填入:{"connect_args": {"http_path": "sql/protocolv1/o/****"}}
  4. 点击「TEST CONNECTION」触发如下错误

错误日志

superset_app | SupersetErrorsException
superset_app | Traceback (most recent call last):
superset_app | File "/app/superset/databases/commands/test_connection.py", line 102, in run
superset_app | with database.get_sqla_engine_with_context() as engine:
superset_app | File "/usr/local/lib/python3.8/contextlib.py", line 113, in enter
superset_app | return next(self.gen)
superset_app | File "/app/superset/models/core.py", line 372, in get_sqla_engine_with_context
superset_app | yield self._get_sqla_engine(schema=schema, nullpool=nullpool, source=source)
superset_app | File "/app/superset/models/core.py", line 396, in _get_sqla_engine
superset_app | params["poolclass"] = NullPool
superset_app | TypeError: 'str' object does not support item assignment

问题原因与解决步骤

原因分析

该错误是因为ENGINE PARAMETERS被解析为字符串而非JSON对象,导致Superset尝试对字符串进行字典操作时失败;另外使用pyhive dialect可能存在兼容性问题。

解决方法

方法一:修正ENGINE PARAMETERS输入格式

确保输入的是标准JSON,不要在外层添加额外引号。正确输入应为:

{"connect_args": {"http_path": "sql/protocolv1/o/****"}}

输入后确认Superset将其识别为JSON对象而非字符串。

方法二:将http_path整合到SQLALCHEMY URI中

直接把http_path作为URI参数传入,避免使用ENGINE PARAMETERS,格式如下:

databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name}?http_path=sql/protocolv1/o/****

方法三:使用官方推荐的Databricks SQL Connector

  1. 修改requirements-local.txt中的依赖,替换为:
    databricks-sql-connector
    
  2. 重新构建镜像并启动服务:
    docker-compose build --force-rm
    docker-compose -f docker-compose-non-dev.yml up -d
    
  3. 使用新的SQLALCHEMY URI格式:
    databricks+connector://token:{access_token}@{server_hostname}:{port}/{database_name}?http_path=sql/protocolv1/o/****
    
    此方法兼容性更好,是Databricks官方推荐的连接方式。

方法四:验证依赖安装

进入Superset容器检查依赖是否正确安装:

docker exec -it <你的Superset容器名称> pip list | grep databricks

如果未找到对应包,需重新构建镜像确保依赖安装成功。

验证连接

完成上述调整后,重新点击「TEST CONNECTION」,连接成功后即可导入Azure Databricks的数据集,在Superset中创建图表。

内容的提问来源于stack exchange,提问作者Nagaraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:50:44