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

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,需通过初始化脚本安装:

  1. 创建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
    
  2. 将脚本上传至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:38