Databricks连接Azure SQL报错:无法打开ODBC Driver 17 for SQL Server
解决Databricks连接Azure SQL时ODBC驱动缺失问题
问题场景
尝试用以下Python代码从Databricks连接Azure SQL数据库:
import pyodbc # Connect to Azure SQL database server = 'xxxx.database.windows.net' database = 'db-dev-xxxx' username = 'abc' password = 'xyz' driver= '{ODBC Driver 17 for SQL Server}' cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
执行后报错:
Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server': file not found (0) (SQLDriverConnect)")
解决步骤
1. 在Databricks集群上安装ODBC驱动17
Databricks基于Linux环境运行,需安装对应版本的ODBC驱动17:
- 集群初始化脚本(推荐):创建bash脚本
install_sql_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,在集群配置的「初始化脚本」中添加该脚本的DBFS路径(如dbfs:/scripts/install_sql_odbc.sh),重启集群即可永久生效。
- 临时测试方案:在Databricks Notebook中运行以下命令,仅当前会话有效,集群重启后需重新执行:
%sh 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. 验证驱动安装状态
运行以下命令确认驱动是否成功安装:
%sh odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
输出包含驱动路径即表示安装成功。
3. 优化连接字符串
Linux环境下驱动名称无需加花括号,可修改代码并简化连接字符串:
import pyodbc server = 'xxxx.database.windows.net' database = 'db-dev-xxxx' username = 'abc' password = 'xyz' driver= 'ODBC Driver 17 for SQL Server' # 用f-string简化拼接 cnxn = pyodbc.connect(f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};PWD={password}')
4. 替代方案:使用Databricks Azure SQL连接器
若不想手动管理ODBC驱动,可使用Databricks官方提供的JDBC连接器:
df = spark.read \ .format("com.microsoft.sqlserver.jdbc.spark") \ .option("url", f"jdbc:sqlserver://{server}:1433;databaseName={database}") \ .option("dbtable", "目标表名") \ .option("user", username) \ .option("password", password) \ .load()
使用前需在集群配置的「库」中添加Maven坐标com.microsoft.azure:spark-mssql-connector_2.12:1.2.0(或适配Spark版本的最新版本)。
内容的提问来源于stack exchange,提问作者user3459293
相关产品推荐
相关产品推荐

