是否可通过Azure Databricks连接Synapse无服务器SQL池?
Azure Databricks连接Synapse无服务器SQL池问题解决
Azure Databricks完全支持连接Synapse无服务器SQL池,你遇到的登录报错是无服务器池的JDBC连接配置和专用池存在差异导致的,可按以下步骤排查修复:
1. 修正JDBC连接参数
Synapse无服务器SQL池强制要求加密连接,你当前的URL缺少加密、证书校验相关的必填参数,修正后的完整配置如下:
synapse_sql_username = 'databricks' synapse_sql_password = 'TestPassword2345' synapse_sql_server = "linkedvsnps98765BIproject-ondemand.sql.azuresynapse.net" synapse_sql_database= "ServerlessTest" # 新增加密、证书校验、超时参数,显式指定1433端口 synapse_sql_url = f"jdbc:sqlserver://{synapse_sql_server}:1433;databaseName={synapse_sql_database};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;" # 执行非查询语句的连接逻辑 sql_driver_manager = spark._sc._gateway.jvm.java.sql.DriverManager sql_con = sql_driver_manager.getConnection(synapse_sql_url, synapse_sql_username, synapse_sql_password)
2. 校验权限配置
虽然凭证在SSMS中可正常使用,仍需确认以下权限配置:
- 确认
databricksSQL用户已经在无服务器池的master库和ServerlessTest库都完成了用户映射 - 确认该用户拥有
ServerlessTest库的CREATE VIEW、CREATE EXTERNAL TABLE等操作权限,可在SSMS中执行以下语句验证:
USE ServerlessTest GO EXEC sp_helprotect @username = 'databricks'
3. 可选优化方案
如果使用Databricks Runtime 11.x及以上版本,推荐使用内置的Synapse专用连接器替代直接调用JDBC DriverManager,稳定性和性能更优,操作示例如下:
# 读取无服务器池表示例 df = spark.read \ .format("com.databricks.spark.sqldw") \ .option("url", synapse_sql_url) \ .option("user", synapse_sql_username) \ .option("password", synapse_sql_password) \ .option("dbtable", "目标表名") \ .load()
其他排查点
如果修改后仍报错,可按以下顺序排查:
- 检查Synapse无服务器池的防火墙规则,已放通Databricks工作区的所有出站IP
- 确认
ServerlessTest数据库名称拼写和实际创建完全一致 - 如果你手动指定了JDBC驱动版本,升级到mssql-jdbc 9.4及以上版本即可兼容无服务器池
内容的提问来源于stack exchange,提问作者OrganicMustard
相关产品推荐
相关产品推荐

