ODBC 驱动程序不工作 - Azure databricks 统一目录已启用

问题描述 投票:0回答:2

我正在尝试使用 pyodbc 从 databricks 连接到 sql server,面临以下问题

import pyodbc
sql_server_url='server_url'
sqlDB='db-dev'
SQL_DB_USER='user'
SQL_DB_PASS='123'
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + sql_server_url +';DATABASE=' + sqlDB + ';UID='+SQL_DB_USER+';PWD='+SQL_DB_PASS)

错误:('01000',“[01000] [unixODBC][驱动程序管理器]无法打开 lib 'ODBC Driver 17 for SQL Server':找不到文件 (0) (SQLDriverConnect)”)

所以我尝试在 bash 命令下运行

%sh
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get -q -y install msodbcsql17

E:该命令只能由root用户使用。 /bin/bash:第 1 行:/etc/apt/sources.list.d/mssql-release.list:权限被拒绝 sudo:需要终端读取密码;使用 -S 选项从标准输入读取或配置askpass helper sudo:需要终端读取密码;使用 -S 选项从标准输入读取或配置askpass helper

相同的代码适用于标准 databricks 版本,但不适用于为运行时版本 11.3 启用的 Unity 目录。当我尝试运行此命令时,我仍然具有超级管理员访问权限,它说权限被拒绝。

有人可以建议如何安装这些 odbc 驱动程序吗?

odbc azure-databricks pypyodbc databricks-unity-catalog
2个回答
0
投票

问题可能是由于我在下面的代码中尝试的命令中使用了

sudo
,并且它成功地为我安装了。

示例代码:

%sh  
 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -  
 curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list   
 apt-get update  
 ACCEPT_EULA=Y apt-get install msodbcsql17

enter image description here

另请参阅解决类似问题的类似线程


0
投票

我自己也遇到了这个问题。有趣的是,当我通过 UI 创建集群并运行安装了 MSODBC 的初始化脚本时,它运行良好。当我通过 API 通过 DevOps 版本创建集群时,初始化脚本因此问题而失败。

这让我相信权限在 UC 中发挥了作用。我发现 init 脚本在启用 UC 的集群上工作的方式是使用创建集群的用户的权限。另一方面,包(whl、maven 等)使用运行集群的用户的权限。

由于我在某个版本中通过 API 创建集群,因此该集群是使用服务主体创建的。我向服务主体授予了对包含保存初始化脚本的卷的架构的读取卷/执行/修改权限,并在目录上使用目录/使用架构/修改/执行。将这些权限分配给用于通过 API 创建集群的服务主体后,init 脚本成功运行。

© www.soinside.com 2019 - 2024. All rights reserved.