Databricks SQL Warehouse连接Azure PostgreSQL报错:不支持数据源
解决Databricks SQL Warehouse连接Azure PostgreSQL的数据源不支持问题
核心原因
Databricks SQL Warehouse(尤其是Serverless版本)对跨数据源访问有严格限制:仅支持通过Unity Catalog管理的外部数据源/表进行联邦查询,不允许直接在SQL语句中使用JDBC连接字符串或Spark API读取JDBC数据源。
具体修复步骤
1. 用Unity Catalog配置联邦查询(正确方式)
- 在Unity Catalog中创建外部数据源:
- 选择数据源类型为
PostgreSQL,配置Azure PostgreSQL的连接信息(主机地址、端口、数据库名称、用户名/密码或Azure AD认证参数)。 - 确保该数据源的权限已分配给你的SQL Warehouse服务主体或用户。
- 选择数据源类型为
- 基于外部数据源创建外部表:
- 执行类似SQL语句映射Azure PostgreSQL中的表:
CREATE TABLE my_catalog.my_schema.postgres_table USING postgresql OPTIONS ( dbtable '<postgres_schema>.<postgres_table>', datasource '<your_unity_catalog_datasource_name>' )
- 执行类似SQL语句映射Azure PostgreSQL中的表:
- 之后直接查询该外部表即可:
SELECT * FROM my_catalog.my_schema.postgres_table
2. 关于JDBC读取的误区
spark.read.jdbc()这类Spark API仅能在交互式集群的Notebook中运行,无法在Databricks SQL Warehouse的查询编辑器中执行。SQL Warehouse是纯SQL执行环境,不支持Spark代码的直接调用,因此会触发数据源不支持的报错。
3. 关于连接验证的澄清
你遇到的「参数错误时的对应提示」大概率是在Notebook环境中测试时出现的,而非SQL Warehouse环境。SQL Warehouse会先拦截不符合数据源规则的查询,不会先去验证数据库连接状态,所以之前的验证逻辑不适用于SQL Warehouse场景。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

