r语言 - 如何在 M1 Apple Silicon Mac 上成功安装 Snowflake 的 ODBC 驱动程序?



我在让 Snowflake 的 ODBC 驱动程序在运行 Big Sur 的 M1 Apple Silicon Mac 上工作时遇到问题。

成功按照 Snowflake 网站上的说明进行操作,使我达到了使用 DSN 从命令行(使用 iodbctest)测试驱动程序会导致以下错误的地步:

1: SQLDriverConnect = [iODBC][Driver Manager]dlopen(/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib, 6): no suitable image found.  Did find:
/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib: no matching architecture in universal wrapper
/opt/snowfl (0) SQLSTATE=00000
2: SQLDriverConnect = [iODBC][Driver Manager]Specified driver could not be loaded (0) SQLSTATE=IM003

我的雪花驱动程序已安装到/opt/snowflake/snowflakeodbc,所以这是正确的 - 我怀疑这专门是一个 M1 问题。我使用的是此处下载镜像中提供的 2.24.1 版本的驱动程序,并且/etc/odbcinst.ini中驱动程序的路径/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib(存在并且从我的所有研究中似乎应该是正确的)。

当我在 R 中通过 DBI 运行连接时,我收到一个完全不同的错误:

Error: nanodbc/nanodbc.cpp:1021: 00000: 
[Snowflake][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function. 

在其他 StackOverflow 帖子中,人们引用了上述错误,这意味着缺少某种库(IODBC 配置不正确?),但我尝试了很多方法都无济于事。任何指导都会很棒。

对此进行了更多修改,并意识到它是 .dmgs 的安装路径的工件和simba.snowflake.ini中的预设路径。

您需要将 Snowflake 驱动程序指向 iODBC dylib(根据文档中的侧扫语句)——该驱动程序最初配置为在路径上的文件夹中查找 ODBC dylib(不是 iODBC)。

安装 iODBC 驱动程序时,请验证它是否已安装到/usr/local/iODBC(这是我的 Silicon Mac 安装它的位置)——以及/usr/local/iODBC/lib是否libiodbc.dylib。如果是这样,请导航到已安装的雪花驱动程序目录(应为/etc/snowflake)并更改simba.snowflake.ini文件(/etc/snowflake/snowflake/snowflakeodbc/universal/simba.snowflake.ini)。您希望取消注释并更改最后一行,使其既未注释又指向 iODBC dylib(而不是默认值,即 ODBC dylib)。

# Darwin specific ODBCInstLib
#   iODBC
ODBCInstLib=/usr/local/iODBC/lib/libiodbcinst.dylib

请确保注释掉任何其他 ODBCInstLib 行,以便只配置一个行。这应该使您能够在M1 Mac上启动并运行与雪花的连接。

其他解决方案都不适合我,但@kiran-kumawat 的回答让我走上了一条行之有效的道路。

似乎问题的核心是 odbc 代码正在寻找 arm64 架构驱动程序,但 Snowflake 正在x86_64架构中提供它。通过安装x86_64版本的odbc,我们能够让它成功地与驱动程序对话。

首先,我卸载了R和Rstudio。(可以在幕后进行SIM链接或更改内容,以使现有安装工作,但我不确定)。

然后安装Rosetta(用于在架构之间转换的Apple软件)和用它构建的自制版本。我将保留我的主要自制版本。

softwareupdate --install-rosetta
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

然后使用该版本的自制软件安装 odbc、R 和 Rstudio。

arch -x86_64 /usr/local/Homebrew/bin/brew install unixodbc
arch -x86_64 /usr/local/Homebrew/bin/brew install --cask rstudio
arch -x86_64 /usr/local/Homebrew/bin/brew install --cask r

然后我们需要安装雪花驱动程序:https://sfc-repo.snowflakecomputing.com/odbc/mac64/latest/index.html

单击所有安装提示。

修改您的文件

/usr/local/etc/odbcinst.ini:

[Snowflake Driver]
Driver          = /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib

/usr/local/etc/odbc.ini

[Snowflake]
Driver             = Snowflake Driver
uid                = <uid>
server             = <server>
role               = <role>
warehouse          = <warehouse>
authenticator      = externalbrowser

我们还需要修改 simba.snowflake.ini 文件。

它有点被锁定,所以运行:

sudo chmod 646 /opt/snowflake/snowflakeodbc/lib/universal/simba.snowflake.ini

然后

vim /opt/snowflake/snowflakeodbc/lib/universal/simba.snowflake.ini

并找到未注释的 ODBCInstLib 行并将其更改为:

ODBCInstLib=/usr/local/Cellar/unixodbc/2.3.9_1/lib/libodbcinst.dylib

设置好后,我能够成功使用此连接:

install.packages("DBI")
install.packages("odbc")
con <- DBI::dbConnect(odbc::odbc(), "Snowflake")

Big Sur is macOS v11.n

Snowflake 支持 macOS 10.14 和 10.15 支持的操作系统

因此,您尝试执行的操作不受支持,也不太可能起作用

我们的一位团队成员建议了以下步骤,它适用于Apple M1系列

  1. 安装最新的雪花驱动程序

  2. 使用cmd卸载基于m1的自制软件/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"

  3. 安装基于英特尔的自制软件 - 完成后重新启动终端arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  4. 重新安装 unixodbcarch -x86_64 brew install unixodbc

  5. 测试isql -v Pattern

  6. 在您的数据库.yml文件中用于连接到雪花进行以下更改- 将"DSN:"改为:conn_str: "Driver={PATH};Locale=en-US;uid={USER_NAME};pwd= {PASSWORD};server=<yours>.snowflakecomputing.com;role=<ROLE>;charset=UTF-8;warehouse=<WAREHOUSE>;database=<DATABASE>;schema=<SCHEMA>;"

有人让这个工作吗?我使用 excel w odbc 刷新雪花文件,并尝试了多种方法来移动驱动程序等,并按照雪花说明进行操作,但从未奏效。我确实得到了运行 Windows arm 的相似之处,但更愿意在 Mac OS 中执行此操作

我也有一台 M1(蒙特雷 12.0 版),我在测试驱动程序时遇到了类似的问题。然而,当我尝试"真正的联系"时,它就像一个魅力。因此,也许去测试"真实连接"以避免浪费使用此类测试的时间对您有好处。希望您觉得这有用。

相关内容

  • 没有找到相关文章