Azure Databricks中Kedro配置SQLQueryDataset连接MSSQL超时报错
解决Azure Databricks中Kedro连接MSSQL的登录超时问题
针对你遇到的pyodbc.OperationalError: HYT00登录超时错误,可按以下步骤排查解决:
1. 验证网络连通性
- 在Databricks集群的笔记本中执行命令测试MSSQL服务器端口(默认1433)的可达性:
nc -zv <sql_server_name> 1433 - 如果不通:
- 检查MSSQL服务器的防火墙规则,确保允许Databricks集群的出站IP或VNet对等连接访问1433端口;
- 确认Databricks集群的网络配置(如VNet、NSG规则)未限制对MSSQL服务器的访问。
2. 修正连接字符串配置
- 修复格式问题:连接字符串中
driver参数需用URL编码,空格替换为+,同时移除多余符号(如第二个配置末尾的引号、SQL语句中Enrollment_End_Date后的逗号); - 增加超时参数:显式设置登录超时时间(如30秒),避免默认超时过短;
- 直接替换变量测试:暂时将
${Driver}等变量替换为实际值,排除Kedro变量解析问题。示例连接字符串:mssql+pyodbc://<sql_username>:<sql_password>@<sql_server_name>/<database_name>?driver=ODBC+Driver+17+for+SQL+Server&MARS_Connection=Yes&authentication=SqlPassword&TrustServerCertificate=Yes&login_timeout=30
3. 确认Databricks集群的ODBC驱动安装
部分Databricks Runtime版本默认未安装ODBC Driver 17 for SQL Server,需通过初始化脚本安装:
- 创建
install_odbc.sh脚本:#!/bin/bash curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install -y msodbcsql17 - 将脚本上传至DBFS,在集群配置中添加该初始化脚本后重启集群。
4. 验证凭据与权限
- 确认
sql_username和sql_password正确,且该账号拥有目标数据库RBC及表RBC_Patients的读取权限; - 如果是Azure SQL Database,需确认已启用SQL身份认证模式,且服务器允许SQL登录。
5. 隔离Kedro配置问题
- 在Databricks笔记本中直接用pyodbc测试连接,排除Kedro框架的影响:
import pyodbc conn = pyodbc.connect( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=<sql_server_name>;" "DATABASE=<database_name>;" "UID=<sql_username>;" "PWD=<sql_password>;" "TrustServerCertificate=Yes;" "login_timeout=30" ) cursor = conn.cursor() cursor.execute("SELECT TOP 1 * FROM [RBC].[RBC_Patients]") print(cursor.fetchone()) - 如果测试成功,检查Kedro的
catalog.yml配置是否正确引用了凭据,例如:rbc_patients_query: type: kedro.io.SQLQueryDataset sql: "SELECT B.Practice,B.Enrollment_Start_Date, B.Enrollment_End_Date FROM [RBC].[RBC_Patients] B" credentials: mssql_credentials dataset_args: connect_args: timeout: 30
内容的提问来源于stack exchange,提问作者saloni
相关产品推荐
相关产品推荐

